전체 글

매일 발전하는 백엔드 개발자
회고

[Toeic Speaking] IH 후기

취업준비를 하면서 어느정도 큰 회사는 지원을 위해 어학 성적을 요구해서 준비를 해야겠다고 생각했고 이전에 토익, 토스, 오픽을 준비해본적은 없었습니다. 알아보니 프리토킹이랑은 거리가 멀었기에 토익스피킹을 준비했습니다. 3주정도는 하루에 30분 정도 공부하고, 시험보기 1주일 전부터 하루 1시간 정도 공부했습니다. 처음엔 유튜브 제이크쌤만 봤는데 모의고사 해설영상을 들어도 어느정도 템플릿이 있는 토익스피킹을 체계적으로 공부하고 있지 않은거 같아 28시간에 끝내는 토익스피킹 스타트 책을 사고 유형별로 체계적으로 공부를 시작한 것 같습니다. 처음 공부하는데 책에서 1주 or 2주 커리큘럼을 제시해줘서 공부하기 수월했고 유형별로 적용되는 템플릿의 틀을 익히고 나서부터는 유튜브에서 찾을 수 있는 토익 모의고사 +..

JPA

[JPA] 페치전략 + 영속성 컨텍스트 등록 방식에 따른 N+1 문제

페치 전략에 따라도 다르지만 영속성 컨텍스트에 어떻게 추가하는지에 따라 또 달라집니다. EAGER Fetch EntityManager.find() find 메소드와 EAGER 페치전략을 사용하면 inner join으로 N+1문제 없이 주로 같이 조회가 되는 연관관계의 경우에 사용할 수 있습니다. EntityManger.createQuery() EAGER 페치전략을 사용해도 EntityManger.createQuery(JPQL)를 사용하면 한 번의 쿼리에 정보를 모두 가져오지 않지만 EAGER 페치전략을 사용하기 때문에 곧바로 N+1 문제가 터집니다. Spring Data JPA JpaRepository의 기본구현체인 SimpleJpaRepository의 findById 와 findAll, 커스텀 find..

Computer Science/Database

[DB] 트랜잭션, 애플리케이션의 트랜잭션 제어

트랜잭션이란 데이터를 저장할 때 단순히 파일에 저장해도 되지만, 데이터베이스에 저장하는 가장 큰 이유입니다. 트랜잭션은 그대로 번역하면 거래인데, 데이터베이스에선 하나의 거래를 안전하게 처리하도록 보장합니다. A가 B에게 5000원 이체한다면, 아래 두개의 작업이 하나처럼 이뤄져야합니다. 1. A의 잔고 5000원 감소 2. B의 잔고 5000원 증가 1번이 성공하고 2번이 실패하고 그대로 반영된다면 A의 잔고만 5000원이 감소하는 문제가 발생합니다. 데이터베이스는 트랜잭션을 적용해 거래 도중 하나라도 실패하면 거래 전의 상태로 되돌릴 수 있습니다. 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 Commit이라하고, 작업 도중 하나라도 실패해 이전으로 되돌리는 것을 Rollback이라 합니다...

Computer Science/Database

[DB] 커넥션풀

노 커넥션 풀 애플리케이션에서 데이터베이스 커넥션 획득 과정 1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션 조회 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결 , 이 과정에서 3 way handshake 같은 TCP/IP 연결 을 위한 네트워크 동작이 발생 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성 5. DB는 커넥션 생성이 완료되었다는 응답 6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환 애플리케이션도 TCP/IP 커넥션을 새로 생성하기 위해 리소스를 사용하고, DB도 커넥션과 세션을 생성해야합니다. 이는 SQL 실행하는 시간뿐만 아니라 커넥..

스프링

[Spring] 자바 통신 인터페이스와 비동기 프로그래밍(feat: MVC, WebFlux)

백엔드개발자로 주로 클라이언트 요청을 받아 비즈니스 로직을 처리해 응답하는 부분을 처리하지만, 서버에서도 외부 API를 사용하는 등 Http 요청을 통해 정보를 얻는 경우도 필요합니다. 지금까지 진행한 프로젝트에서는 이 부분을 깊게 공부할 시간이 없어 모두 Spring이 제공하는 RestTemplate을 사용했지만 기반이 되는 부분을 조금 더 공부한 내용을 정리하기 위한 글입니다. RestTemplate Spring3.0부터 간편하게 동기식 Rest API 호출을 할 수 있게 해주는 클래스(Spring MVC 기반)입니다. JSON, XML, String 응답을 처리할 수 있고 Header와 Contetn-Type을 지정할 수 있습니다. Header, Content-Type 지정은 exchange()의 ..

개발로그

[Spring SSE] 서버에서 클라이언트로 실시간 알림 푸쉬 SSE

구현하고 싶은 기능 여행 관광지나 축제 리뷰를 지도로 관리하는 프로젝트를 진행하면서 사용자가 관심있는 지역을 팔로우하고, 그 지역에 새로운 관광지나 축제가 추가 될 때 알림을 보내고 싶었습니다. 일단 구현화면부터 보여드리겠습니다. 지역 팔로우 관리자가 새로운 컨텐츠 추가시 팔로워들에게 알림(좌측 화면 사용자/ 우측 화면 관리자) SSE 선택 이유 프로젝트에서 새로운 관광지나 축제가 생길시 서버에서 클라이언트로 단방향 알림 푸쉬가 필요했습니다. 요청을 주기적으로 보내면서 이벤트를 체크하는 polling은 http 오버헤드 때문에 서버의 부담이 크고, 양방향 통신이 필요없기에 websocket은 고려하지 않았습니다. http 요청을 이벤트 발생시까지 유지하는 Long polling과 text/event-st..

개발로그

[Mybatis] JPA 고수인 내가 Mybatis 세계에선 뉴비?

사실 JPA 고수 아닙니다.   자바 백엔드 시작을 김영한님의 강의를 보고 시작한만큼 DB접근 기술을 JPA밖에 몰랐었고, 올해 초에 프로그래머스에서 진행한 단순 CRUD 구현을 그만 ! 스터디를 들으면서 JDBC Template를 써보긴했지만 스터디 커리큘럼을 따라가면서도 테이블 정의하는 것과 PrepareStatment로 쿼리짜는 게 귀찮아 DBA의 튜닝 쿼리를 빠르게 적용할 수 있겠다는 장점만 기억하는 것과 JPA를 쓰고 싶다는 생각만 했었던 것 같습니다. JPA를 한번 더 추상화한 스프링 데이터 JPA를 사용하면서 얼마나 많은 부분이 추상화된지 이론적으로 공부는 했지만 마이바티스를 다뤄보면서 직접 테이블 생성과 쿼리를 짜며 프로젝트를 진행하며 사용한 후기를 정리합니다. Mybatis-Spring ..

회고

[회고] 2023 장애인 분야 해커톤대회(장애플러스기술) 본선 입선 후기

시연영상 예선 https://kfpd.org/51/38 2023 장애인 분야 해커톤 대회 > [신청/결과] 사업신청 | 한국장애인재단 우리나라 최초의 장애인을 위한 공익재단. 장애인의 사회 참여와 인권 증진을 위해 소중한 후원금을 투명하게 사용하고 성실하게 사업을 수행합니다. kfpd.org 장애인을 위한 앱 해커톤이 열려 대학 동기친구들과 좋은 기회인것 같아 참가했습니다. 팀원 세명 모두 취업준비중인 상황이였기에 아이디어톤보다는 실제 개발을 진행하는 메이커톤으로 참가했고 기획 AAC 기획한 앱의 주요기능인 AAC에 대해 간단히 알려드리겠습니다. AAC는 보완대체의사소통수단으로 언어 및 의사소통의 장애를 가진분들을 위한말과 타이핑으로 정확한 의사소통이 어려울 때 의사성이 확실한 이모티콘이나 문장을 가르켜..

비오베베
우당탕탕 개발