태그 목록
전체보기 (138)Java(47)JPA(26)java persistence api(18)알고리즘(10)백준(10)친절한 SQL 튜닝(9)Java의 정석(9)Spring(9)Java의 정석 3rd Edition(8)자바의 정석(7)Lambda expression(7)stream(7)mysql(6)스터디(6)SQL 튜닝(5)김영한(5)인프런(5)java stream(5)JWT(5)친절한 SQL 튜닝 스터디(4)CI/CD(4)JPQL(4)Spring Framework(4)Spring boot(4)스프링의 정석(3)자바의 정석 3rd(3)master-slave(3)stomp(3)무중단 배포(3)자바의 정석 기초편(3)lambda(3)남궁성(3)TDD(3)불친절한 SQL 프로그래밍(3)spring security(3)aop(3)spring-data-jpa(3)람다와 스트림(3)OAuth 2.0(3)github actions(2)queue(2)stack(2)SQL 튜닝 스터디(2)객체지향 설계(2)DB Replication(2)PetHub(2)채팅(2)Thread(2)msa(2)오브젝트 코드로 이해하는 객체지향 설계(2)replication(2)Micro Service Architecture(2)M1 Pro(2)db(2)ORM(2)JPA Test Code(2)kotlin(2)자료구조(2)webflux(2)코프링(2)오브젝트(2)토비의 스프링 부트(2)Querydsl(2)Nginx(2)자바(2)JPA 게시판(2)배포 자동화(2)kafka(2)oAuth(1)OX퀴즈(1)로드 밸런싱(1)JPA 프로젝트(1)AST(1)Eclipse Jdbc(1)validation(1)Java-Array(1)Custom Authentication(1)Index(1)디비안(1)security(1)reflect API(1)BufferdReader(1)redis(1)Kotlin JPA(1)스트림(1)자바의 정석3rd(1)slave(1)Java 8(1)2480번(1)message broker(1)스프링 공부(1)oauth2(1)멀티 쓰레드(1)annotation(1)ORM Framework(1)백준 알고리즘(1)JPA Study(1)linkedlist(1)jsp(1)저장 공간 부족(1)비관적 락(1)회원 가입(1)PessimisticLockException(1)채팅 기능(1)access token(1)JPA 스터디(1)mysql 설치(1)JDBC API(1)inheritance(1)1110번(1)functional programming(1)mongodb(1)Invocation(1)백준 8598(1)알고리즘 문제(1)Lombok Anotation Processor(1)collection framework(1)connection(1)Stomp Disconnect(1)Opensearch(1)1:1 채팅(1)OAuth jwt(1)JSON WEB TOKEN(1)Constructor Injection(1)Collection(1)InputStream(1)Spring-Test(1)homebrew(1)di(1)JWT + OAuth(1)Java Lambda Expression(1)query tuning(1)DecimalFormat(1)MYSQL 복제(1)HikariCP(1)JPA 게시판 프로젝트(1)API 조회(1)apache(1)10951번(1)M:1(1)dbeaver(1)Spring AOP(1)BooleanExpression(1)DB 스터디(1)헤드 퍼스트 디자인 패턴(1)Design Pattern(1)abstract syntax tree(1)N + 1 문제 해결(1)HashSet(1)spring-rest-docs(1)apache poi(1)조영호(1)Kotiln + Spring(1)BufferedWriter(1)이중화(1)데이터베이스 튜닝(1)Redis Refresh Token(1)최대값(1)master(1)chatting(1)자바 스크립트 스터디(1)n + 1(1) do it! 자료구조(1)Strategy Pattern(1)Dynamic Proxy(1)Configuration(1)DB 튜닝(1)성능 개선(1)전략 패턴(1)Java의 정석 3rd(1)cookie(1)@Contional matches(1)문제풀기(1)데이터베이스 스터디(1)Database(1)excel(1)Java의정석(1)CRUD(1)채팅 안읽음기능(1)Object Oriented Programming(1)디자인 패턴(1)불친절한 SQL 프로그래밍 스터디(1)JPA 인프런(1)조영호 오브젝트(1)JDBC(1)spring transaction(1)private(1)private method(1)websocket(1)JPA 동적쿼리(1)Java Persistence Query Language(1)set(1)안읽음 기능(1)Java Arm64(1)Spring DI(1)session(1)Filed Injection(1)Message Queue(1)git(1)Spring Boot 채팅 개발(1)ci(1)slack(1)fp(1)JPA 페이징(1)자바의 정석 3판(1)DriverManager(1)sql(1)compiler(1)conditional(1)Setter Injection(1)채팅 개발(1)쓰레드(1)Spring framwork(1)별찍기(1)cglib(1)IoC(1)LomBok(1)matches(1).java(1)쓰레드 프로그래밍(1)동적쿼리(1)Polymorphism(1)OOP(1)JPA 강의(1)자바의 정석 3rd Edition(1)refresh-token(1)List(1)driver(1)aspect oriented programming(1)javascript-study(1)JSTL CORE(1)토비의 스프링 부트 원리와 이해(1)Test Driven Development(1)Pet Hub(1)@self-invocation(1)Proxy(1)DB 이중화(1)oracle-db(1)Spring Boot Chatting(1)outputstream(1)백준 8598 Java(1)회원 로그인(1)jstl(1)백준 2480번(1)M1 homebrew(1)
post-thumbnail

인턴의 당돌한 고래사육(a.k.a OJT 프로젝트에 MSA를 태워?) - 최종화

OJT 프로젝트 발표 전, docker-compose를 이용해 한 번에 10개의 컨테이너를 올리는 작업을 하려고 하던 와중에 너무나도 초라한 제 코드를 보고나니 리팩토링을 해야겠다는 생각이 들었습니다.가장 큰 문제는 option이 3개, 최소 값이냐 최대 값이냐에 따른

2023년 11월 26일
·
5개의 댓글
·
post-thumbnail

인턴의 당돌한 고래사육(a.k.a OJT 프로젝트에 MSA를 태워?) - 2

첫 Opensearch 쿼리 성공 후 속전속결로 API 제작이 끝나자 자신감이 넘치기 시작했습니다.Spring Cloud 제품을 쓰라는 요구사항이 있었기 때문에 사이드 프로젝트를 기획하며 연습해둔 얄팍한 MSA 구축 지식을 써보고 싶은 마음도 커지고 있었죠..그래! 어

2023년 10월 29일
·
2개의 댓글
·
post-thumbnail

인턴의 당돌한 고래사육(a.k.a OJT 프로젝트에 MSA를 태워?) - 1

블로그를 보다보니 글을 안쓴지도 두 달이나 된 것 같습니다.꾸준히 공부도 하고 깃에 소스코드도 업로드하고 있지만 너무 블로그에 글을 안쓴 것 같아 마음먹고 이번 인턴 OJT 프로젝트에 대한 내용을 남겨볼까 합니다.9월 중순에 입사해서 팀 배정을 10월에 받고, 다른 팀

2023년 10월 29일
·
2개의 댓글
·
post-thumbnail

Lombok 너의 내부가 알고싶어!(feat: Rexbok 만들기)

Java 개발자라면 누구나 한번쯤 접해보았을 보일러 플레이트 코드 정리의 끝판왕 Lombok입니다.Spring 의존성을 주입할때도 @RequiredArgsConstructor 를 활용해 참 편하게 주입받아 왔는데요.그렇다면 Lombok은 애너테이션을 붙이면 어떻게 작성

2023년 8월 21일
·
8개의 댓글
·
post-thumbnail

JDBC API는 어떻게 사용하는 DB에 맞는 Driver를 찾을 수 있을까?

이펙티브 자바 2장 아이템 1(생성자 대신 정적 팩토리 메서드를 고려하라)을 보다가 정적 팩토리 메서드의 장점 5개중 마지막 장점으로 나온 부분에서 JDBC API를 예시로 드는데 도저히 이해가 되지 않았습니다.JDBC API를 뜯고 또 뜯어보며, 이 내용을 이해하기

2023년 7월 25일
·
5개의 댓글
·
post-thumbnail

전략 패턴(Strategy Pattern) 어떻게 적용할 수 있을까?

여러번의 프로젝트를 진행해오면서 기능 구현을 위해 코드를 작성하는 일은 편안해졌지만 내가 작성한 코드에 대한 확신을 얻기는 아직 어려웠습니다.그렇기에 좋은 코드에 대한 생각과 좋은 코드는 무엇일지, 좋은 설계를 하는 방법이 있을지에 대한 많은 생각을 해오게 되었습니다.

2023년 7월 23일
·
4개의 댓글
·
post-thumbnail

Spring AOP - Dynamic Proxy vs CGLIB

🤔 Proxy 객체는 어떻게 만들어 사용할까? Spring에서 AOP가 동작하는 방식에 대해서는 여러번의 포스팅을 통해서 알아보았습니다. AOP는 프록시 객체를 이용해서 부가 기능을 주입하고 동작시키는데, 그렇다면 Spring에서 프록시 객체를 어떻게 만드는지에 대해

2023년 7월 14일
·
4개의 댓글
·
post-thumbnail

MySQL - Master - Slave 구조에서 Slave를 Scale-Out 해보기

Pet-Hub 프로젝트를 마치고 기능과 성능 부분에서 많은 리팩토링을 진행하고 있던 와중에 프로젝트를 위해 구성한 인프라가 과연 견고한가에 대한 의문점이 생겼습니다.기존에는 Master와 Slave가 1:1로 매칭되어 있는 상태로 Replication을 진행했습니다.만

2023년 7월 6일
·
2개의 댓글
·
post-thumbnail

AOP Self - Invocation 문제 AOP의 한계일까?

AOP로 로깅을 하거나 공통 부가기능을 Aspect 클래스로 분리하여 적용하였는데, 특정 부분에서만 AOP가 동작하지 않는 문제점을 확인했습니다.부가 기능이 동작하지 않는 이유는 Self - Invocation(내부 호출) 이슈때문인데요.이게 어떤 문제인지와 어떻게 해

2023년 7월 6일
·
2개의 댓글
·
post-thumbnail

[Pet-Hub] 분양글 API 조회 성능 개선하기(Feat. 성능이 28815배나 증가 한다고?)

Pet-Hub 서비스는 현재 이용자가 많이 없고, 게시글이 많아야 20개 ~ 30개 정도이기 때문에 조회 성능으로 인한 쿼리 튜닝이나 개선을 염두해야 될 정도로 성능 문제가 없는 서비스입니다.초기에는 그렇지만 나중에 서비스가 확장되어 많은 유저들이 이용한다고 했을때 적

2023년 6월 28일
·
4개의 댓글
·
post-thumbnail

[Pet-Hub] Lock을 걸지 않아도 발생한 PessimisticLockException해결

잘 되고 있던 분양글 조회 API가 제대로 응답하지 않는 문제가 발생해서 로그를 살펴보니, 두가지 키워드로 문제 상황을 파악할 수 있었습니다.PessimisticLockException과 TransactionTimeOut 입니다.락을 획득하지 못해서 예외가 발생했고,

2023년 6월 21일
·
2개의 댓글
·
post-thumbnail

[Pet-Hub] Spring RestDocs 문서화를 위한 Custom Security 인증객체 주입하기

API 문서화를 진행하기 위해, Spring Rest Docs를 이용한 문서 생성을 진행하고 있었는데 Spring Rest Docs는 모든 테스트가 통과해야 문서가 생성되어 테스트를 강제하는 장점이 있습니다.Pet-Hub 서비스는 Spring Security 기반의 J

2023년 6월 18일
·
0개의 댓글
·
post-thumbnail

[Pet-Hub] 채팅방 퇴장시 Disconnect Header에 Authorization Header를 포함하지 못하는 문제 해결

채팅방에서 회원이 퇴장하게 되면, Redis에서 회원의 정보를 삭제해줘야 합니다.채팅방에서 회원이 퇴장할때 Redis에서 삭제되지 않게 되면, 채팅 상대방은 접속중이지 않지만 메시지는 읽음 처리되고 채팅 상대방에게 알람이 가지 않는 논리적오류가 발생하게됩니다.채팅방 입

2023년 6월 18일
·
0개의 댓글
·
post-thumbnail

[Pet-Hub] 1:1 채팅 기능에서 채팅 읽음 여부 표시기능 구현

Pet-Hub 서비스는 사용자간 반려동물 분양을 위한 1:1 채팅 기능을 제공하고 있습니다.프론트엔드 개발자분께서 채팅을 읽었는지에 대한 여부를 화면에 표시하기 위해 안읽음 기능 구현을 위한 readcount를 json format에 추가해달라고 요청해주셨습니다.또 접

2023년 6월 17일
·
2개의 댓글
·
post-thumbnail

Stomp + Kafka를 이용한 채팅 기능 개발하기 - (with Spring Boot) #2 (Kafka 설치 + MongoDB & Stomp 설정)

Kafka와 Zookeeper는 docker-compose를 이용해서 이미지를 pull받고 띄워주도록 하겠습니다.docker-compose.yml 파일에 위에 작성된 코드를 붙여 넣어 주시고 파일이 있는 경로에서 아래의 명령어를 입력해줍니다.$ docker-compos

2023년 6월 13일
·
4개의 댓글
·
post-thumbnail

Stomp + Kafka를 이용한 채팅 기능 개발하기 - (with Spring Boot) #1 (Kafka와 Stomp는 무엇일까?)

이번에 진행했던 분양 플랫폼 프로젝트에서 팀원들과 온라인 킥오프를 하며 기능을 도출하고, 각 기능별 담당자를 배정하는 도중 우리 프로젝트의 핵심이자 큰 챌린지가 될 수 있는 채팅 기능을 누가 맡을지 서로 눈치게임을 하고 있었습니다.팀 프로젝트를 하다보면 호기심과 열정으

2023년 6월 12일
·
8개의 댓글
·
post-thumbnail

QueryDSL - BooleanExpression을 이용한 동적 쿼리 해결

이번 프로젝트를 진행하면서 분양 글 검색 기능도 필요해서 이 부분을 어떻게 구현해야 할지 고민하고 있었습니다.먼저 검색에 대한 요구사항을 보겠습니다.검색은 제목, 내용, 제목 + 내용, 품종으로 검색이 가능해야 한다.게시글 검색과 함께 필터(강아지, 고양이, 기타)가

2023년 6월 6일
·
0개의 댓글
·
post-thumbnail

[Pet-Hub] AOP를 활용한 로깅 기능 구현하기

😠 발생한 문제 프론트앤드 개발자분들과 함께 애플리케이션을 개발하면서 가끔 백엔드 서버의 문제로 어떤 예외가 발생했으니 확인을 부탁드린다는 요청을 받을때가 있습니다. 특히 NPE(NullPointerException)와 같이 빈번히 발생하는 예외라면 어떤 파라미터가 비어서 들어왔거나 Service에서 빈 매개변수의 값을 참조하지는 않았거나 여러 예외의 ...

2023년 6월 4일
·
2개의 댓글
·
post-thumbnail

[Pet-Hub] MySQL 데이터 분산 처리를 위한 Master-Slave 이중화 구성(Spring과 JPA 설정)

MySQL Replication 설정을 통한 master-slave 구조의 셋팅은 저번 포스팅에서 전부 완료되었습니다.추가적으로 애플리케이션 내부에서 어떤 DB로 요청을 보낼 지 결정하기 위해서는 Spring 설정이 필수적입니다.따라서 이번 포스팅은 Spring + J

2023년 6월 2일
·
0개의 댓글
·
post-thumbnail

[Pet-Hub] MySQL 데이터 분산 처리를 위한 Master-Slave 이중화 구성(MySQL Replication 설정)

지금껏 프로젝트를 진행하면서 대부분 RDS 서비스를 이용해 한개의 데이터베이스만 사용해왔습니다.이번 프로젝트의 중점 목표 중 하나인 고가용성의 설계와 확장성 있는 구조를 가진 서버를 구축하는 것에 초점을 두고 Master - Slave 구조의 DB 이중화 작업을 하게

2023년 5월 29일
·
0개의 댓글
·