배경 홈페이지에 선거 기능을 추가하고자 API 개발 도중 데이터베이스 설계상 컬럼 2개를 사용하여 복합키를 가지는 테이블을 발견하였습니다. 이전까지의 테이블은 하나의 컬럼을 통해 데이터를 식별하도록 설계하였기에 @Id 어노테이션을 사용하여 간단히 엔티티로 생성할 수 있었지만 복합키를 가지는 경우는 처음 마주쳤기에 이를 해결하는 과정을 정리해보고자 합니다. 복합키 단점 1. FK를 맺을 때 사이드 이펙트가 크다 CREATE TABLE library ( region_no varchar(10), library_name varchar(50), CONSTRAINT PK_library PRIMARY KEY (region_no, library_name) ); CREATE TABLE book ( book_id int,..
메시지 개요 다음과 같이 화면을 구성하였는데 기획자분께서 문구가 마음에 안 든다고 책 목록을 도서 목록으로, 제목을 타이틀로, 작가를 저자로, 요약을 한줄평으로 바꾸자는 요청을 합니다. 저런 문구들이 HTML에 하드 코딩되어 있다면 일일이 바꿔야 하는 참사가 발생합니다. 화면이 적다면 일일이 바꾸는 것도 나쁘지 않습니다. 하지만 비슷한 맥락을 가진 화면들이 무수히 많이 존재한다면... 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능이 메시지 기능입니다. 메시지에 대한 파일을 작성 후 가져와서 사용한다면 변경과 관리에서 유연함을 가질 수 있습니다. 스프링에서는 messages.properties에 위에 보이는 형식처럼 key, value 형태로 작성하여 메시지를 관리할 수 있습니다. // messag..
Spring Boot 프로젝트를 진행하면서 웹 브라우저를 통해 API의 결과를 확인하고자 하였습니다. 확인하고자 했던 API는 아래와 같습니다. @GetMapping("/api/v1/posts/{id}") public PostsResponseDto findById(@PathVariable Long id) { return postsService.findById(id); } URI를 통해 ID값을 전달받아 해당 ID에 해당하는 Posts 엔티티를 Dto로 변환 후 반환하게 되는 아주 간단한 API입니다. Dto를 반환하기에 웹 브라우저에서 해당 URI로 접근하여도 JSON 형태로 올바른 결과를 확인할 수 있을 것이라 기대하였습니다. 하지만 예상과 다르게 다음과 같은 화면과 로그를 보게 되었습니다. 406 N..
네트워크 통신 Network 컴퓨터 간의 데이터를 주고받기 위해서는 즉, 통신을 하기 위해서는 네트워크가 필요하다. 네트워크란 컴퓨터 노드들이 자원을 공유할 수 있도록 링크로 연결하여 하나의 망을 만든 것을 의미한다. 이러한 연결이 존재하기 때문에 노드(컴퓨터) 간의 데이터 교환이 가능하다. 다양한 컴퓨터 시스템 간의 통신을 위해서는 표준 프로토콜이 필요하게 되었고, 국제 표준화 기구(ISO)에서는 OSI Model을 정의하게 되었다. 최초로 정의된 모델은 7계층을 가지고 있었는데 표준이 지속적으로 갱신되면서 현재는 5계층 모델이 전 세계 표준으로 적용되고 있다. HTTP 5계층 모델은 네트워크상의 프로토콜을 정의한 모델이고 인터넷상에서의 주요 프로토콜은 HTTP이다. HTTP는 하이퍼텍스트 전송 프로토..
Logging 로그 목적 로그란? 모든 현상과 동작 정보를 시간 경과에 따라 기록한 데이터를 의미한다. 이러한 로그를 잘 남기는 것은 개발에 있어서 중요한 역할을 하게 된다. 개발 시 에러를 확인하고 해결할 수 있고 개발을 진행함에도 도움을 준다. 또한 해당 데이터를 바탕으로 마케팅을 할 수 있으며 보안 측면에서도 사용할 수 있다. 장점들로 인해 모든 것을 로그로 기록하게 된다면 너무 방대한 양의 로그 파일이 생성되는 문제가 발생하고 의미 있는 정보를 얻을 수 없다. 그렇기에 로그를 효율적으로 남기는 것이 중요하다. 간단한 로그 Spring에서 가장 간단하게 로그를 남기는 방법은 System.out.println을 사용하는 것이다. 콘솔창을 통해 출력 결과를 쉽고 빠르게 확인할 수 있다는 장점이 존재한다..