전체 글

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

Java(Spring)를 익힌 이유

최근 SSAFY에서 프로젝트 회고를 하며 Jenkins, Nginx 등 특정 기술을 사용한 이유를 정리할 기회가 있었습니다. 그러다 MySQL, Spring을 거슬러 웹 개발을 위한 언어로 JAVA를 선택한 이유를 떠올려봤습니다. 졸업프로젝트를 하며 비즈니스 로직 설계하는 백엔드에 흥미를 느꼈지만, 처음 접한 자바스크립트 + Express.js보다는 Java + Spring을 택했습니다. 전공자로서 자바 프로그래밍, 네트워크 프로그래밍 등의 수업에서 자연스럽게 노출되었고 대한민국 백엔드풀은 자바가 압도적이라 선택했습니다만 시장에서 이런 점유율을 차지할 수 있던 이유는 개발자가 서비스 자체에 집중해줄 수 있게 해줘서 인것 같습니다. 1. Write once, run anywhere를 위한 JVM으로 운영체..

인프라

[인프라] EC2, docker 이용한 배포환경 기초

도커는 애플리케이션 계층의 추상화, 커널을 공유함(운영체제 단위의 포트 공유하기에 같은 번호 포트 사용은 안됨) spring, db, 1. docker run jar 2. docker run -p 8080:8080 jar 3. docker run -p 8080:8080 jar & EC2 보안 설정 인바운딩 8080 허용 4. docker run -p 8080:8080 jar & EC2 보안 설정 인바운딩 8080 허용 && docker run -p 33006:3306 db & EC2 보안 설정 인바운딩 3306 허용 application.yml db.url = EC2 IP db.port = 3306 5. docker run -p 8080:8080 jar & EC2 보안 설정 인바운딩 8080 허용 && ..

인프라

프록시 서버, Nginx 설정(리버스 프록시, SSL)(Ubuntu 24.03ver)

프록시 서버 왜 쓸까? 기본 웹 서비스 통신의 방식입니다. www.naver.com을 치면 이런 화면을 받아오는 것과 같습니다. 이후 로그인을 하는 등 비즈니스 로직과 관련된 부분을 동작하면 백엔드에 요청하고 응답받은 리소스를 활용해 화면을 재구성합니다 웹 서비스 인프라를 구축하며 서버의 프론트엔드의 3000번과 백엔드의 8080번 포트를 모두 직접 노출을 했습니다. 하지만 그 앞단에 프록시 서버를 두면 아래와 같이 통신하고 다음과 같은 장점들을 갖습니다. Nginx를 프록시 서버로 활용해 아래와 같은 이점을 살렸습니다. 1. 리버스 프록시 기능으로 백엔드, 프론트엔드의 포트노출을 최소화 2. SSL 오프로딩으로 하위 백엔드 서버와 프론트엔드 서버는 http 통신만으로 부하를 줄이고 인증서 유지보수 간소..

회고

[프로젝트 회고] 시작 프로젝트 회고

https://github.com/kanggeonnim/PerspectiView?tab=readme-ov-file GitHub - kanggeonnim/PerspectiView: 시점으로 보는 작품, 시작 시점으로 보는 작품, 시작. Contribute to kanggeonnim/PerspectiView development by creating an account on GitHub. github.com 이전까지 개인 토이프로젝트, 2인 프로젝트는 경험해봤지만 6인 팀프로젝트와 팀장은 특히 더 무거웠습니다.. 자세한 기획과 기능 데모는 깃허브를 통해 확인하실 수 있습니다. 프로젝트에서 제가 맡았던 부분 위주로 회고 시작하겠습니다. 저는 평소에 웹툰, 웹소설을 즐겨보는 독자지만 작품 설정 관리가 안되는 작..

회고

[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 실행하는 시간뿐만 아니라 커넥..

비오베베
우당탕탕 개발