전체 글

Kafka를 이용해 Producer/Consumer 맛보기! - Configuration
토이 프로젝트를 진행하던 도중 API Gateway를 도입하게 되면서 기존 회원 API 서버 내 회원 서비스에 구현되있는 소셜 로그인 및 회원 가입 기능과 JWT 엑세스 토큰 및 리프레시 토큰을 발급해주는 기능을 인증 서버내 회원 서비스로 따로 빼게 되었다. 이 때, 발생한 문제점이 있다. 현재 토이 프로젝트는 소셜 로그인을 이용하지만 추가적인 정보가 필요하기 때문에 소셜 로그인 이후 해당 서비스에 처음 로그인 한 경우 (서비스에 가입되지 않은 상태)라면 추가적인 회원 정보 및 추천인과 관심 OTT 서비스를 등록해야 한다. 여기서 추가적인 회원 정보는 인증 서버 내 회원 서비스에서 사용하는 간단한 회원 가입 로직을 이용하면 되지만, 가입 시 입력한 추천인에게 포인트를 적립(Optional)해주거나 회원이..

싱글톤 스코프, 프로토타입 스코프
빈 스코프란 빈이 존재할 수 있는 범위를 말한다. 기본적으로 빈은 싱글톤 스코프로 생성되며 스프링 컨테이너가 시작할 때 부터 종료할 때까지 유지된다. 싱글톤 : 스프링 컨테이너가 시작되고 종료될 때까지 빈을 유지 프로토타입 : 빈 생성 및 의존성 주입까지만 스프링 컨테이너가 관리를 해준다. 웹 관련 스코프 request : 웹 요청을 받는 순간부터 로직을 처리후 응답할때까지 빈을 유지 session : 웹 세션이 생성되고 종료될 때까지 빈을 유지 application : 서블릿 컨텍스트와 같은 범위로 빈을 유지 싱글톤 스코프와 프로토타입 스코프 싱글톤 스코프의 빈은 스프링 컨테이너가 시작시 생성되고 종료까지 유지되기 때문에 항상 같은 인스턴스 스프링 빈을 반환한다. 하지만, 프로토타입 스코프를 스프링 컨..
![[백준, Java] 2573번 : 빙산](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxfDIW%2FbtrA0zt2F7s%2FwkYjnmaqVTNiCkNx0BKSAk%2Fimg.gif)
[백준, Java] 2573번 : 빙산
🔗 문제 링크 https://www.acmicpc.net/problem/2573 😮 문제 해결 방법 빙산을 녹여야 하는지 판단을 하는 배열과 실제로 인접한 바다를 체크한 후 녹은 후의 빙산 상태를 저장하는 배열 두개를 사용해서 해결했다. 빙산 상태를 녹이는 배열은 현재 해의 빙산 배열을 복사한 배열이다. 기존 빙산 배열을 녹은 후 빙산 상태를 저장하는 배열로 사용하기 위해 복사한다. 기존 빙산 배열을 이용해서 빙산이 남아있고, 상하좌우 인접한 부분에 바다가 있는지 판단한다. 이 때, 단 하나로 빙산이 남아있지 않았다면, 빙산이 다 녹을때 까지 두 덩어리 이상으로 빙산이 나눠지지 않았기 때문에 0을 리턴하고 종료한다. 상하좌우 인접한 바다의 개수 만큼 빙산의 크기를 녹여준다. 현재 해의 녹일 수 있는 빙산..

다양한 연관관계 매핑
엔티티의 연관관계를 매핑하기 위해서는 “다중성, 방향, 연관관계 주인” 3가지가 반드시 고려되어야 한다. 다중성 DB 테이블 관점에서 다중성을 의미한다. 다대일 관계 : DB에서 N:1 관계를 의미하며, @ManyToOne을 이용해 표현한다. 일대다 관계 : DB에서 1:N 관계를 의미하며, @OneToMany를 이용해 표현한다. 일대일 관계 : DB에서 1:1 관계를 의미하며, @OneToOne을 이용해 표현한다. 다대다 관계 : DB에서 N:M 관계를 의미하며, @ManyToMany를 이용해 표현한다. 실무에서 잘 사용하지 않는다. 방향 테이블은 외래키를 가지고 테이블을 조인해 조인한 테이블 데이터를 사용할 수 있지만, 객체는 참조를 통해 연관된 객체를 조회하기 때문에 A객체가 B객체를 조회할 수 있..

Spring Data JPA의 Page와 Slice
Sping Data JPA는 간단한 페이징 처리를 지원한다. 페이징을 처리를 하기 위해선 한 페이지 당 보여줄 데이터의 개수와 몇 번째 페이지인지에 대한 정보가 필요하다. @GetMapping public ResponseEntity searchPointDetail(@RequestParam(name = "page") int page, @RequestParam(name = "size") int size) { // 로직 } Spring Data JPA는 이러한 정보를 Pageable 객체를 이용하고, Pageable 객체를 JpaRepository에 전달하여 페이징 처리를 지원한다. @Repository public interface PointRepository extends JpaRepository { Pa..

Spring Data JPA를 이용해 커서 페이징 구현하기
프로젝트를 진행하면서 회원의 포인트 적립 및 사용 상세 이력을 조회하는 요구사항을 개발하기 위해서 Spring Data JPA를 이용한 페이징 처리를 구현했다. 화면에서 커서 스크롤시 데이터를 호출해오는 무한 스크롤 방식의 페이징을 위해 커서 페이징 방식으로 구현을 진행했다. 동작 방식을 간단히 정리하면, 프론트에서 URI로 회원의 최신 포인트 상세 이력 아이디와 조회 건수를 담아 호출한다. 헤더에 담겨진 JWT 토큰을 파싱해 회원 아이디를 추출한다. 회원 아이디를 통해 포인트 상세이력을 페이징 해서 조회한 후 가공해 반환한다. Controller 코드를 확인해보자. // PointController @GetMapping(value = "/details") @Operation(summary = "포인트 ..
![[백기선님과 함께하는 Live Study] 4주차) 제어문/반복문](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnwypx%2FbtrAJByBVBt%2F9qF16XvuDIWimypuVrWFR1%2Fimg.png)
[백기선님과 함께하는 Live Study] 4주차) 제어문/반복문
목표 자바가 제공하는 제어문을 학습하세요. 학습할 것 선택문 반복문 선택문(조건문) Java는 if/else문(조건문)과 Switch/case문(선택문)을 제공한다. if/else 문 if문에 들어가는 조건식이 참인 경우에 if문 내의 블록 코드를 실행한다. int a = 10; if(a > 5) { //조건이 참이므로 코드 실행 a += 5; } 만약 조건식이 거짓인 경우 else if문이 있다면 else if 문의 조건을, else문이 있다면 else문의 코드를 실행한다. int a = 5; if(a > 5) { System.out.println("a가 5보다 큰 경우 코드 실행"); } else if(a < 5) { System.out.println("a가 5보다 작은 경우 코드 실행"); } el..
![[백기선님과 함께하는 Live Study] 3주차) 연산자](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIz4Ip%2FbtrAG6Me8Fh%2FIKFyhQjYEZk5iGiZn35xF0%2Fimg.png)
[백기선님과 함께하는 Live Study] 3주차) 연산자
목표 자바가 제공하는 다양한 연산자를 학습하세요. 학습할 것 산술 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선순위 (optional) Java 13. switch 연산자 산술 연산자 산술 연산자는 수학적인 계산에 사용되는 연산자를 말한다. 기본적으로 아는 +, -, *, /, %(사칙 연산자)가 산술 연산자이다. + 연산자는 숫자 값은 더해주는 연산자이고, 문자열의 경우 두 개의 문자열을 이어 새로운 문자열을 만들어준다. int a = 10; int b = 15; int c = a + b; // 25 String s1 = "abc"; String s2 = "def"; String s3 = s1 + ..