모르는 장소에서 길을 찾을 때 어떤 방법을 선호하시나요? 대표적인 방법으로는 주변 사람들에게 길을 묻거나 지도를 확인하는 방법이 존재합니다. 길을 묻는 방법은 기능적이고 해결책 지향적인 접근 방법입니다. 하지만 이 방법은 일반적이지도 재사용할 수 있지도 않습니다. 위치는 상대적이기 때문에 시간이 지나면서 정보가 희미해져 갑니다. 지도를 확인하는 방법은 구조적이고 문제 지향적인 접근 방법입니다. 지도는 실제 세계를 추상화시켜 놓은 것이기에 풍부한 컨텍스트 정보가 담겨 있습니다. 이는 재사용 가능하며 길을 찾는 목적 이외에도 다양하게 활용할 수 있습니다. 여기서 주목해야 할 키워드는 기능과 구조입니다. 기능에 초점을 맞추다 보면 변화하는 요구사항에 대응하기 어렵습니다. 하지만 구조가 중심이 된다면 재사용할 ..
메시지 개요 다음과 같이 화면을 구성하였는데 기획자분께서 문구가 마음에 안 든다고 책 목록을 도서 목록으로, 제목을 타이틀로, 작가를 저자로, 요약을 한줄평으로 바꾸자는 요청을 합니다. 저런 문구들이 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..
SQL을 사용할 때 연관관계가 있는 다른 테이블의 정보를 이용하려고 한다면 JOIN을 사용해야 합니다. INNER JOIN, OUTER JOIN과 같은 JOIN 형태가 존재합니다. 그렇다면 FETCH JOIN은 무엇을 의미할까요? Fetch Join 페치 조인은 SQL에서 이야기하는 조인의 종류는 아닙니다. JPQL에서 성능 최적화를 위해 제공하는 조인의 종류입니다. 이를 설명하기 전에 JPQL에 대해 간략히 설명하겠습니다. JPQL(Java Persistence Query Language) SQL이 DB에 있는 테이블을 조회하는 쿼리라고 한다면 JPQL은 엔티티 객체를 조회하는 객체지향 쿼리를 의미합니다. 문법은 SQL과 비슷하고 SQL이 제공하는 기능을 유사하게 지원합니다. public class M..
문제 자바 프로젝트에서 JPA에 대해 실습하던 도중 JPA가 Entity를 인식하지 못하는 문제가 발생하였습니다. hibernate와 h2 의존성도 잘 가져오고 persistence.xml도 참고하던 강의의 내용을 복사하였기에 잘 작성하였습니다. @Entity 어노테이션도 잘 작성하였지만 public class Main { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(..