스터디 노트
-
[📝 JPA] 연관관계의 주인과 매핑관련 스터디스터디 노트 2025. 6. 26. 12:54
JPA에서 연관관계는 객체 간의 참조를 데이터베이스의 외래 키(Foreign Key) 관계로 매핑하는 중요한 개념입니다. 특히 양방향 연관관계에서는 '연관관계 주인'이라는 개념을 명확히 이해해야 데이터 정합성 문제를 피할 수 있습니다. 1. JPA 연관관계 주인의 개념관계형 데이터베이스에서는 테이블 간의 관계가 외래 키(Foreign Key)를 통해 이루어집니다. 이 외래 키는 항상 하나의 테이블에만 존재합니다. 예를 들어, Member 테이블에 Team 테이블의 team_id라는 외래 키가 있다면, Member 테이블만이 Team과의 관계를 "가지고" 있다고 볼 수 있습니다.반면, 객체 지향 프로그래밍에서는 양방향으로 객체 참조를 가질 수 있습니다. Member 객체가 Team 객체를 참조하고, Tea..
-
📝 [JPA] @EntityGraph에 대하여..스터디 노트 2025. 6. 25. 23:21
JPA(Java Persistence API)는 객체 지향 프로그래밍과 관계형 데이터베이스 사이의 패러다임 불일치(Impedance Mismatch)를 해소해주며 개발 생산성을 비약적으로 높여주는 강력한 도구입니다. 우리는 더 이상 복잡한 SQL 쿼리를 직접 작성할 필요 없이, 객체 지향적으로 데이터를 다룰 수 있게 되었죠.하지만 JPA를 무분별하게 사용하다 보면, 어느 순간 애플리케이션의 성능이 급격히 저하되는 경험을 하게 될 때가 있습니다. 그 원인 중 하나가 바로 N+1 문제인데요.오늘 우리는 이 N+1 문제를 효과적으로 해결하고, JPA 쿼리 성능을 최적화할 수 있는 강력한 기능인 @EntityGraph에 대해 깊이 파고들어 볼 것입니다.1. @EntityGraph는 무엇인가? (개념 이해)@En..
-
[Docker + Spring Boot] Spring boot jar 배포 시 도커 컨테이너 내 파일 위치 확인(app.jar)스터디 노트 2025. 3. 25. 22:00
Docker에서 Spring Boot로 만들어진 jar 이미지를 배포하게 되면 jar 내부 내장 톰캣을 통하여 컨테이너가 구동되게 됩니다.이럴 경우 컨테이너 내부에서 파일의 위치를 따로 폴더 형식으로 찾을 수가 없습니다.이럴 경우 root의 app.jar 파일을 확인해볼 수 있습니다. JAR 명령어로 확인Spring Boot JAR 파일은 Java 실행 환경에서 jar 명령어를 사용할 수 있습니다.docker exec -it /bin/sh컨테이너 내에서 아래 명령어 실행:jar tf /app/app.jar | grep application.yml jar tf : JAR 내부의 파일 목록을 확인하는 명령어grep application.yml : 설정 파일이 있는지 찾기📌 출력 예시BOOT-INF/cl..
-
[Spring Security 3.x + JWT] PermitAll() 이 정상적으로 인식이 되지 않을 경우스터디 노트 2024. 9. 22. 12:36
JWT Filter를 활용한 로그인 기능을 구현하던 중, 회원가입 API를 호출하니 권한이 없다는 황당한 오류를 맞이하게 되었습니다.분명히 httpSecurity에 authorizeHttpRequests부분에 PermitAll로 회원가입과 로그인을 처리하는 auth 하위 URI는 모두 허용하도록 처리를 하였음에도 불구하고 JWT Filter를 타면서 token검증을 하더군요.. 실제로 인증을 하지 않으며 무조건 허용하도록 설정을 했음에도 정상 동작하지 않아 파악을 해보니, permitAll()을 설정해도 무조건 Spring Security의 필터 체인을 거친다는 것을 알게 되었습니다. 이유는 알았고 이제 해결 방법을 찾아야지요.해결 방법은 매우 간단했습니다.기본적인 Security Config를 사용한다..
-
[Mac] 실행중인 포트 확인 및 종료 방법스터디 노트 2024. 8. 19. 09:34
가끔 개발을 하다 보면 의도치 않게 Local Tomcat을 실행한 후 종료시켜버리는 경우들이 더러 있습니다.그 후 다시 로컬 톰캣을 실행하면 항상 해당 포트가 사용중이라는 문구가 뜨곤 하죠.. 가볍게 맥에서 사용중인 포트를 스캐닝하고 원하는 포트를 종료시키는 명령어를 공유해볼까 합니다.Operating System/Mac OS1. 현재 열린 포트 목록 확인 sudo lsof -PiTCP -sTCP:LISTEN2. 특정 포트를 찾아 종료하고 싶을 때 특정 포트의 PID 찾기 sudo lsof -i :8080 위에서 구한 PID로 종료: sudo kill -9 {PID} 전체 사용중인 포트를 리스트업해보면 아래와 같이 나옵니다. 아래의 리스트에서 원하는 포트를 체크하시면 됩니다. 둘째론 원하는 포트를..
-
Ubuntu docker 설치 명령어 모음스터디 노트 2024. 7. 25. 21:06
1. 관리자 권한 주기sudo su2. 우분투 시스템 패키지 업데이트apt-get update3. 필요한 패키지 설치apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common4. Docker의 공식 GPG키를 추가curl -fsSL | sudo apt-key add -5. Docker의 공식 apt 저장소를 추가add-apt-repository "deb [arch=amd64] $(lsb_release -cs) stable"6. 시스템 패키지 업데이트apt-get update7. Docker 설치apt-get install docker-ce docker-ce-cli containerd.io8..
-
[Docker] Container에서 사용중인 포트 확인하기스터디 노트 2024. 6. 4. 16:15
Docker container에서 사용 중인 포트를 확인하려면 다음과 같이 사용하면 됩니다.순서는 다음과 같습니다. 1. 컨테이너의 PID를 조회합니다.// 사용중인 컨테이너가 tomcat 이라면docker inspect -f '{{.State.Pid}}' tomcat>> 3584 [PID] 2. 조회된 PID를 사용해 Container를 지정하여 사용중인 포트를 확인합니다.// 조회된 PID를 활용하여 열려있는 Port를 확인>> sudo nsenter -t 3584 -n netstat -tuplnActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State ..
-
Nginx 설치 및 Reverse Proxy 설정스터디 노트 2024. 5. 14. 16:17
nginx를 활용하여 리버스 프록시를 설정해보려고 합니다.SSL 인증서가 존재한다는 가정 하에 작성한 것이니 참고 부탁드립니다. // nginx 설치sudo apt-get updatesudo apt-get install nginxnginx가 설치가 되고 나면 nginx -v로 버전을 확인할 수 있습니다.기본 파일 경로로는 /etc/nginx를 확인하면 됩니다. 해당 위치(/etc/nginx/)에서 conf.d 폴더 내부에 default.conf 파일에 SSL과 Proxy 설정을 해줄 수 있습니다.server { server_name [Server의 Domain 이름]; // SSL Port(443) Listen 설정 listen [::]:443 ssl; listen 443 ssl; // SS..