만쥬의 개발일기
article thumbnail
[Spring] - JPA 칼럼명 카멜케이스 적용하기

JPA를 사용하다보면 entity의 칼럼명에 있는 카멜케이스를 자동으로 스네이크 케이스로 변환하곤 한다. 정 카멜케이스를 쓰고 싶다 하면 다음 설정을 따라하면 된다. application.properties에 다음 내용을 저장한다. spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 정상적으로 couple_id가 아닌 coupleId로 저장된 모습이다. r..

article thumbnail
[Spring] - JPA DDL-Auto 사용 시 한글 설정 자동화

Spring의 JPA를 사용할 때 JPA는 테이블을 자동으로 생성해주는데, 기본적으로 한글 설정은 되어 있지 않다. 따라서 튜플에 한글 값을 넣게 되면 SQL Error: 1366, SQLState: HY000: incorrect string value 라는 에러가 발생하곤 한다. 첫번째 해결 방법 (급할 때) 이는 내가 만든 MySql 테이블의 언어가 UTF-8로 설정 되지 않아서 발생하는 문제인데, 바로 고치는 방법으로는 다음 명령어로 mysql 터미널에서 직접 한글입력이 가능하도록 변경해주는 방법이 있다. mysql > ALTER TABLE [테이블명] convert to charset utf8;그러나 모든 작업의 자동화는 개발자의 꿈이 아닌가?? 따라서 JPA가 자동으로 테이블을 만들때마다 위 설..

article thumbnail
[백엔드 기술 면접 대비] - 3.Nginx를 사용한 리버스 프록시는 왜 필요할까?
🖥️CS/📒백엔드 2023. 11. 21. 18:00

리버스 프록시란? 클라이언트 요청을 대신 받아 내부 서버로 전달해주는 것을 리버스 프록시(Reverse Proxy) 라고 한다. 그렇다면 프록시란? 프록시란 대리라는 의미로, 정보를 대신 전달해주는 주체라고 생각하면 되는데, 만약 이 프록시 없이 웹 서버를 운영한다고 가정해보자. localhost:3000 라고 하는 웹서버를 열어서 운영했을 때, 사용자가 갑자기 많아지거나, 웹서버가 그대로 노출되어 있기 때문에 보안적으로 위험성이 증가한다. nginx를 사용하면 로드 밸런싱으로 부하를 줄여줄 수 있고, 분산 처리 또한 가능하며 웹서버의 SSL 인증도 적용할 수 있다. (SSL이란?) 따라서 아래와 같이 사용자 -> nginx -> 웹서버로 구성해서 사용자의 요청을 nginx가 대신 웹서버로 전달해주도록 ..

article thumbnail
[백엔드 기술 면접 대비] - 2. SSL이란?
🖥️CS/📒백엔드 2023. 11. 21. 17:54

SSL이란? SSL(Secure Sockets Layer)은 암호화 기반 인터넷 보안 프로토콜이다. 인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 출범했고, SSL은 현재 사용 중인 TLS 암호화의 전신이다. TLS와의 차이 또한 의문이 생길 수 있는데, SSL은 TLS(Transport Layer Security)이라는 또 다른 프로토콜의 바로 이전 버전이다. 1999년 IETF(Internet Engineering Task Force)는 SSL에 대한 업데이트를 제안했고, IETF가 이 업데이트를 개발하고 Netscape는 더 이상 참여하지 않게 되면서, 이름이 TLS로 바뀌었다. SSL의 최종 버전(3.0)과 TLS 첫 버전의 차이는 크지 않으며, 이름이 바뀐 것은 소유권 변경..

[Trouble Shooting] - Nginx 502 error, connect() to unix:///tmp/uwsgi.sock failed (13: Permission denied) while connecting to upstream

Nginx로 웹서버를 구성한 프로젝트를 진행 중 끔찍한 에러를 만났다. 바로 502 Bad Gateway (nginx/1.8.2) 라는 페이지만 보이고, 아무 화면도 보이지 않았다. 인터넷에는 다양한 해결법이 있어서 여러가지 시도를 해보았는데, 다음 방법들이 있었다. Nginx 502 Bad Gateway가 뜨는 근본적인 문제는 대부분 Nginx가 가리키는 포트에서 서버가 정상적으로 동작하지 않을 때인데, 로그를 반드시 잘 확인해봐야 한다. sudo tail -f /var/log/nginx/error.log 터미널에 위 명령어를 입력해 에러 내역을 확인하고, 자신에게 맞는 해결법을 적용하자. 인터넷 서핑을 하면서 찾아본 해결법들을 정리해보겠다. nginx.conf 파일 수정 (실패) sudo nano /..

article thumbnail
[Spring] - 스프링 MySql 데이터베이스와 JPA 연동

프로젝트 생성 및 의존성 추가 Mysql과 연동하여 JPA를 사용할 것이므로 위와 같은 dependencties를 추가한다. 기존 프로젝트에서 MySql과 JPA를 추가하여 사용하고 싶다면 build.gradle에 다음 두 줄을 추가한다. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'mysql:mysql-connector-java:8.0.32' application.properties를 다음과 같이 작성한다. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost..

article thumbnail
[알고리즘] - 다익스트라(Dijkstra) 알고리즘
✏️PS 2023. 11. 20. 18:36

다익스트라 알고리즘이란? 다익스트라 알고리즘은 DP를 활용한 대표적인 최단 경로 탐색 알고리즘이다. 인공위성, GPS 등 현실 세계에서 굉장히 많이 사용되며, 다음과 같은 특징들이 있다. 특정한 하나의 정점에서 다른 모든 정점으로 가는 최단 경로를 알려준다. 음의 간선을 포함할 수 없다 (이 경우 벨만 포드 알고리즘 사용) $O(NlogN)$의 시간 복잡도를 가진다. 동작 단계 1. 출발 노드를 설정한다. 2. 최단 거리 테이블을 초기화한다. 3. 현재 위치한 노드의 인접 노드 중 아직 방문하지 않았고, 거리가 가장 짧은 노드를 선택한다. 4. 선택된 노드를 방문처리한다. 5. 해당 노드를 거쳐 다른 노드로 넘어가는 간선의 가중치를 통해 최단 거리 테이블을 업데이트한다. 6. 3~5 과정을 반복한다. 최..

article thumbnail
[Spring 기술 면접 대비] - 2. @Controller VS @RestController

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있다. 두 어노테이션의 주요한 차이점은 HTTP Response Body가 생성되는 방식이다. 두 어노테이션의 자세한 차이점과 사용법을 살펴보자. @Controller란? 전통적인 Spring MVC의 컨트롤러인 @Controller 주로 View를 반환하기 위해 사용한다. 아래 예시와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환한다. Client는 URI 형식으로 웹 서비스에 요청을 보낸다. DispatcherServlet이 요청을 처리할 대상을 찾는다. HandlerAdapter을 통해 요청을 Controller로 위임한다. Control..