본문 바로가기

전체 글135

[JPA] N+1 문제 및 해결방안 N+1 문제란? 어떤 엔티티를 조회(1)할 때 그 엔티티에 연관된 또다른 엔티티의 갯수(N) 만큼 추가적인 조회(쿼리)가 발생하는 현상 * 1+N 이라고 칭하는 것이 보다 더 직관적이라고 여겨짐 즉, 하위 엔티티들을 첫 쿼리 실행 시 한번에 가져오지 않고 하위 엔티티별 개별적으로 쿼리가 실행되는 것 이 문제는 사용자가 늘어나고 트래픽이 증가했을 때 과장된 쿼리를 수행함으로써 DB 운영에 악영향을 끼칠 수 있다. 예시) 엔티티 Member와 Team이 ManyToOne 관계이고 객체 team1에 member1, member2, member3가 속해있는 상태다. 이때 team1을 조회하면 member1, member2, member3에 대한 조회도 자동적으로 이루어진다. 지연 로딩(LAZY)이든 즉시 로딩(.. 2022. 10. 11.
Object 클래스 1. 개요 Object는 자바의 최상위 부모 클래스이다. 따라서 자바의 모든 클래스는 java.lang.Object 클래스를 상속하게 된다. Object 클래스는 아무 필드도 가지지 않으며 메소드로만 구성되어 있다. 이 메소드들은 모든 클래스에서 이용할 수 있다. *모든 클래스가 Object 클래스를 상속하므로 2. 포함 메소드 1) equals() - 객체 비교 매개타입은 Object로, 모든 객체가 매개 값으로 입력될 수 있다. * Object가 최상위 타입이므로 모든 객체는 Object 타입으로 자동 타입 변환될 수 있기 때문이다 public boolean equals(Object obj) {...} equals() 메소드의 결과값은 비교 연산자인 "=="과 동일한 결과가 리턴된다. primitiv.. 2022. 10. 4.
JPQL(객체지향 쿼리 언어) 1. 개요 1) JPA가 지원하는 다양한 쿼리 방법 JPQL JPA Criteria QueryDSL Native SQL JDBC API 2) JPQL 소개 JPA를 사용하면 Entity 객체를 중심으로 개발하지만 SQL은 DB의 테이블을 대상으로 쿼리를 수행 이러한 간극을 보완하기 위해 JPQL은 테이블이 아닌 Entity 객체를 대상으로 쿼리를 수행 즉, JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공함; 특정 DB SQL에 의존하지 않음 이는 SQL문법과 유사하여 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 JPQL = 객체지향 SQL ; JPQL은 결국 SQL로 변환됨 2. 기본 문법과 기능 1) JPQL 문법 SQL 문법과 대부분 비슷함.. 2022. 10. 4.
[Spring] Port 8080 is already in use 에러 해결 방법 1. 상황IntelliJ 상에서는 서버가 구동되지 않고 있는데 Application을 구동시키면 포트가 이미 사용되고 있다며 구동이 되지 않았다.Port 8080 is already in use 2. 문제 인식IDE(IntelliJ) 상에서는 프로세스가 종료되었으나 실제 프로세스가 종료되지 않은 경우가 있다고 한다. 3. 해결8080 포트가 이미 사용되고 있어 새로 구동하는 것이 불가하니 사용할 포트 번호를 변경해줄 수도 있지만 그렇다고 언제까지 8080 포트를 already in use 상태로 내버려 둘 수는 없으니 8080 포트 상에서 구동되고 있는 서버를 종료시키는 방법을 선택했다. In MAC OS1.  터미널에서 현재 8080 포트에서 실행되고 있는 프로세스를 조회한다.lsof -n -i -P .. 2022. 8. 25.
Spring Security 회원가입 POST 요청 시 500 에러 발생 1. 상황Spring Security를 활용하여 회원가입 기능을 구현하던 중회원가입 페이지에서 각 항목들을 입력하고 '회원가입' 버튼을 눌렀더니아래와 같은 에러 페이지(type=Internal Server Error, status=500)가 반환되었다.설계대로라면 회원가입 요청 성공 시 로그인 페이지로 리다이렉트 되어야 한다. 2. 문제 인식서버를 구동한 IntelliJ로 돌아와서 콘솔 로그를 확인보았더니 SQL 관련 에러를 확인할 수 있었다.주요 부분을 발췌하면 아래 코드와 같다.SQL Error: 42001, SQLState: 42001Syntax error in SQL statement "select user0...생략" expected "identifier"; SQL statement: 검색 결과.. 2022. 8. 21.
Port Forwarding(포트 포워딩)이 안될때 - 80 to 8080 1. 상황URL 주소에서 매번 뒤에 :8080을 붙여주어야 하는 번거로움을 덜고자8080 포트를 80 포트로 연결(redirect)해주려 한다.* http 요청에서 80포트가 기본이므로, 굳이 :80을 붙이지 않아도 자동으로 연결이 된다. 아래는 터미널로 접속한 ubuntu 서버 상에서, 80 포트를 8080 포트로 redirect해주는 코드이다.sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 2. 문제위 코드를 실행시키고 브라우저에서 기존의 URL에서 :8080 을 제거하고 접속을 시도했더니 아무런 응답이 없었다. 코드를 실행하기 전과 다름 없는 상황, 즉 80 포트가 8080 포트로 연결되지 .. 2022. 8. 18.
[백준] 2753. 윤년 / 파이썬 (python) https://www.acmicpc.net/problem/2753 2753번: 윤년 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서 www.acmicpc.net 문제 풀이 간단한 문제이지만 배울 점이 있었다. 여러 개의 조건문을 작성해야 할 때 간략히 표현하는 방법에 대해서이다. 이 문제에서 윤년이 되기 위한 세 개의 조건이 있다. 아래와 같이 여러 줄에 걸쳐 표현할 수도 있지만, n = int(input()) if n % 4 == 0: if n % 100 != 0 or n % 400 == 0: print(1) else: print(0) else.. 2022. 7. 10.
[백준] 2437. 저울 / 파이썬 (python) https://www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 문제 풀이 문제를 관통하는 키워드는 '누적합'이다. 예를 들어, 아래와 같이 주어졌다고 가정해보자. 4 1 2 4 5 가장 작은 추 하나만 가지고 있는 상태에서 하나씩 추가로 가지게 된다고 생각하면 1만 가지고 있을 때는 측정 가능범위 [0, 1] 2가 추가되면 [0, 1] + [2, 3] = [0, 3] 4가 추가되면 [0, 3] + [4, 7] = [0, 7] 5가 추가되면 [0, 7] + [5, 12].. 2022. 7. 9.
MySQL 기초 SHOW DATABASES 현재 서버에 어떤 DB가 있는지 조회 USE 사용할 DB 지정 USE database_name Workbench에서 직접 선택하는 것도 가능 SHOW TABLES DB 내의 테이블 이름 보기 SHOW TABLE STATUS 테이블의 정보 조회 DESCRIBE(DESC) 특정 테이블에 있는 col 조회 DESC col_name SELECT 요구하는 데이터를 가져오기 SELECT 열이름 - 테이블에서 필요로 하는 열만 가져오기 - 여러 개의 열을 가져오려면 콤마(,)로 구분 - 출력 순서는 입력한 순서대로 WHERE 특정한 조건에 해당되는 정보 조회 SELECT 필드이름 FROM 테이블이름 WHERE 조건식 - AND - BETWEEN - IN : 이산적인 값의 조건 WHERE 열.. 2022. 7. 7.
[백준] 1449. 수리공 항승 / 파이썬 (python) 문제 항승이는 품질이 심각하게 나쁜 수도 파이프 회사의 수리공이다. 항승이는 세준 지하철 공사에서 물이 샌다는 소식을 듣고 수리를 하러 갔다. 파이프에서 물이 새는 곳은 신기하게도 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다. 항승이는 길이가 L인 테이프를 무한개 가지고 있다. 항승이는 테이프를 이용해서 물을 막으려고 한다. 항승이는 항상 물을 막을 때, 적어도 그 위치의 좌우 0.5만큼 간격을 줘야 물이 다시는 안 샌다고 생각한다. 물이 새는 곳의 위치와, 항승이가 가지고 있는 테이프의 길이 L이 주어졌을 때, 항승이가 필요한 테이프의 최소 개수를 구하는 프로그램을 작성하시오. 테이프를 자를 수 없고, 테이프를 겹쳐서 붙이는 것도 가능하다. 입력 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 .. 2022. 6. 26.
[백준] 2439. 별 찍기 - 2 / 파이썬 (python) 문제 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. https://www.acmicpc.net/problem/2439 문제 풀이 처음에 시도한 풀이는 아래와 같다. "출력 형식이 틀렸습니다."라는 메세지와 함께 오답으로 결과를 받았다. n = int(input()) for i in range(1, n+1): print(' '*(n-i), '*'*i) 정답인 풀이는 아래와 같다. n = int(input()) for i in range(1, n+1): print(' '*(n-i) + '*'*i) .. 2022. 6. 24.
[백준] 1543. 문서검색 / 파이썬 (python) 문제 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다. 세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다. 출.. 2022. 6. 13.