2025/01 5

[Server] Nginx가 뭔데 배포할 때마다 설치하는거지?

📍개요스프링 프로젝트를 AWS로 배포하게 될 때마다 Nginx를 통해서 진행한다.그럴 때마다 드는 생각이 "AWS에서도 Nginx 없이 호출이 가능하지 않나? 기본적으로 Spring boot에 tomcat이 있을텐데.."였다.왜 다양한 레퍼런스를 참고하면 다들 Nginx를 사용해서 배포를 하는 걸까? 필수도 아닌데 무엇이 좋길래?   📍웹서버시작하기 앞서 우리는 웹서버의 개념을 확실히하고 가야한다.서버란 개념은 어떤 컴퓨터로 하여금 서버 역할을 하도록 해주는 소프트웨어를 무슨무슨 서버라고 부른다.그래서 백엔드 개발자를 보고 서버를 개발한다고 하는 것.웹서버도 소프트웨어의 개념이다. 그 대표로 아파치, Nginx가 있다. 쉽게 말해 '웹' 서버니까 이 컴퓨터를, 서버들 중에서도 웹사이트를 제공하는 서버..

server 2025.01.21

[SpringBoot] @Transactional을 정확하게 알아보자

📍Transaction이란?필자는 단순하게 transaction을 데이터베이스에서 진행되는 하나의 단위라고만 알고 있었다. 이 transaction을 좀 더 자세하게 알아보자.transaction은 여러 작업을 하나의 논리적 단위로 묶어서 실행한다. 즉 1번부터 4번까지의 작업(여러 작업)을 하나로 묶어 문제없이 모두 성공하면 commit을, 중간에 문제가 발생했을 때 모든 작업을 롤백(rollback)한다.이렇게 하면 모든 작업이 수행되거나 or 모두 수행되지 않기 때문에 데이터 일관성을 유지할 수 있다.   📍프록시란?transaction과 함께 나오는 개념 중에 프록시란 개념이 있다.실제 객체에 대한 대리 객체를 생성하여, 호출을 가로채고 추가 작업(로깅, 트랜잭션 등)을 수행한 후 실제 객체에..

springboot 2025.01.15

[SpringBoot] N+1 문제와 해결 방법

📍N+1이 뭐지?조회 시 1개의 쿼리를 생각하고 설계를 했으나 나오지 않아도 되는 조회의 쿼리가 N개가 더 발생하는 문제. JPA의 경우에는 객체에 대해서 조회한다고 해도 다양한 연관관계들의 매핑에 의해서 관계가 맺어진 다른 객체가 함께 조회되는 경우에 N+1이 발생하게 된다. 예를 들어 jpql문으로 findById를 사용할 때에는 하나의 entity만 조회하기 때문에 문제가 없어 보인다.하지만 findByAll을 요청하는 것이라면 가져오는 entity마다 연관관계로 정의된 객체를 검색하게 된다. (즉시로딩 상황) 즉, 모든 User에 대해서 검색하고 싶어서 select 쿼리를 하나 날렸지만(1), 즉시로딩이 걸려있기 때문에 각각의 User가 가진 entity을 모두 검색한다(N)라는 N+1 문제가 ..

springboot 2025.01.10

[SpringBoot] 영속성 컨텍스트, 그리고 EntityManager

📍영속성 컨텍스트와 EntityManager? 왜 공부해야하지?영속성 컨텍스트와 EntityManager은 JPA의 핵심 개념이다.이 둘을 모른다면 JPA가 주는 이점을 100% 누릴 수 없다.(SQL을 사용하는 것보다 못한 상황이 일어난다)   📍영속성 컨텍스트(PersistenceContext)Entity를 영구 저장하는 환경이라는 뜻눈에 보이지 않는 논리적 개념애플리케이션과 DB 사이 객체를 보관하는 가상의 DB로 생각하기EntityManager를 통해 Entity를 영속성 컨텍스트에 보관, 관리   📍EntityManagerEntityManager를 통해 영속성 컨텍스트에 접근하고 관리EntityManager를 생성하면 그 안에 영속성 컨텍스트 있음EntityManagerFactory통해 요..

springboot 2025.01.09

[SpringBoot] 끄적끄적 프로젝트 쿼리 성능 개선을 해보자

📍성능 개선을 하게된 계기이 당시 기능 구현에만 집중해서 코드를 구현했기 때문에 성능을 고려하지 못했다.지인의 블로그를 읽는 중, 성능 관련 테스트 방법이 보이길래 나도 진행해 보게 되었다.처참하게 많이 발생하는 쿼리 수를 보고 쿼리 개선을 해야겠다는 생각과 함께 성능 개선 시작..(K6 툴 사용)-> 지인 블로그https://velog.io/@hyeok_1212/%EC%A1%B0%ED%9A%8C%EC%88%98-%EC%A0%95%ED%95%A9%EC%84%B1 조회수 기능 구현 (동시성 이슈)조회수는 사용자가 콘텐츠에 대한 관심을 가장 직관적으로 확인할 수 있는 지표에요. 서비스의 품질과 사용자 경험에 긍정적인 영향을 주는 기능이지만, 단순한 구현은 신뢰도를 떨어뜨릴 위험velog.io   📍기존 ..

springboot 2025.01.06