대다수의 어플리케이션은 데이터를 관계형 DB에 저장하게 된다. 그렇기 떄문에 데이터를 저장하고 불러오는데 SQL이 자주 사용되는데, 여기서 많은 문제가 발생하게 된다. 객체 그리고 관계형 데이터베이스의 불일치가 일어나는데, 이것으로 인해 상속, 연관관계, 데이터 타입, 데이터 식별 방법 등에서 문제가 발생한다. 위와 같이 상속을 받는 객체 구조(ITEM) 이 있다면, Album 객체를 db에 저장한다면, 테이블에는 상속이라는 개념이 없기 때문에 Album 테이블 내에 있는 멤버 중에 Item 테이블에 있는 항목과 Album에 있는 항목을 각각 sql에 작성해서 넣어주어야한다. DB에서 꺼낼때 또한 마찬가지다. 연관관계의 경우, Member와 Team의 객체가 위와 같다면, 객체와 테이블 간의 불일치가 또..
SpringBoot
@ResponseBody HTTP의 내부에 직접 문자 내용을 반환시키는 역할을 한다. ‘viewResolver’ 대신에 **‘HttpMessageConverter’**가 동작한다. 본 문자처리시에는 ‘StringHttpMessageConverter’, 기본 객체처리시에는 ****‘MappingJackson2HttpMessageConverter’****가 ************************************************동작한다. byte 나 등등 기타 처리시에는 ‘**HttpMessageConverter’**가 기본 설정으로 등록되어 있다. 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합하여 HttpMessageConverter 가 선택된다. 클래스..

자바 코드로 직접 Spring @Bean을 등록하는 방법 우리는 @Repositroy, @Service 같은 어노테이션을 사용하여 bean을 등록하는 경우가 많았는데, 이번엔 기본적으로 어노테이션 없이 @Bean을 등록하는 방법을 알아보려고 한다. @Configuration public class SpringConfig { @Bean public MemberService memberService() { return new MemberService(); } } @Configuration 을 사용하고, @Bean 으로 어노테이션을 설정해주면 스프링 컨테이너에 할당한다. MemberService가 컨테이너에 할당된다. MemberService() 내부에 memberRepository 구현체를 지정해주어야 Me..
@Bean 컨테이너 안에 들어있는 객체들, 컨테이너에 담겨있기 때문에 사용하려면 불러와야한다. 여러 Annotation을 사용해서 일반적인 객체를 bean으로 등록할 수 있다. 객체를 Bean으로 등록할 때 아무 어노테이션을 붙이지 않으면 싱글톤 scope로 등록된다. 동일한 타입의 Bean들 중에 @Primary annotation을 붙여주면 그 bean이 우선권을 가지게 된다. DI 의존관계 주입 의존관계는 정적인 클래스의 의존관계와, 실행 시점에서 결정되는 동적인 인스턴스 의존관계 둘을 분리해서 생각해야한다. 정적인 클래스 의존관계 클래스가 사용하는 import 코드만 보고도 판단할 수 있다. 실행시키지 않아도 분석할 수 있다. 동적인 객체 인스턴스 의존 관계 애플리케이션의 실행 시점에서 실제 생성..
💡 Stream 컬렉션이나 배열에 저장된 데이터를 처리하기 위한 API이다. 특정 조건에 따라 Stream에서 요소의 하위 집합만 선택할 수 있는 필터링이다. filter() 스트림에 적용할 수 있으며 Stream에는 filter()를 통과하는 요소만 포함되게된다. 테스트 목적에서만 사용해야 하며, 실제 프로그램 코딩에서는 사용해선 안된다. import java.util.Arra**ys; import java.util.List**; import java.util.stream.Stream; public class Main { public static void main(String[] args) { // Create a list of integers List numbers = Arrays.asList(1, ..
원문 문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오. imp..

@AllArgsConstructor @NoArgsConstructor @Data public class WishListEntity extends MemoryDbEntity { private String title; // 음식명, 장소명 private String category; // 카테고리 private String address; // 주소 private String readAddress; // 도로명 private String homePageLink; // 홈페이지 주소 private String imageLink; // 음식,가게 이미지 주소 private boolean isVisit; // 방문 여부 private int visitCount; // 방문 횟수 private LocalDateTi..

네이버의 지역검색 API를 활용하여, 키워드를 검색해서 맛집을 검색할 수 있는 웹 페이지를 만들어보려고 한다. 검색된 가게를 저장하여, 위시리스트( 즐겨찾기 )를 추가하거나 방문횟수를 추가할 수 있도록 설계하여 내가 가 봤던 사이트들을 기록 할 수 있는 사이트를 만드는 프로젝트를 진행하려한다. 화면설계 키워드를 검색하여, 검색 결과가 리스트업 되고, 그 옆에 그 가게에 등록된 설명이 출력된다. 추가 버튼을 클릭시, 자신의 위시리스트에 추가되며, 자신의 위시리스트에 등록된 가게에는 방문횟수를 추가할 수 있는 버튼이 표시되어 몇 번 방문 했는지 기록할 수 있다. 전과 다르게 이클립스가 아닌 inteliJ로 프로젝트를 진행해보려합니다. spring을 이용할 것이기 때문에, spring initializr에서 ..