Programming/Spring, SpringBoot
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bDhIzT/btsC1ovnPn5/w47QCtzzob9XYEuIRZUk2k/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. MVC 패턴 : 사용자 인터페이스를 비즈니스 로직으로부터 분리하는 것을 목표로 만들어진 디자인 패턴 Model : 어플리케이션을 표현하기 위한 데이터 관리하는 부분 View : 사용자에게 정보가 표현되는 방식을 관리하는 부분 Controller : 사용자의 입력을 받아, Model이 이해할 수 있는 형태로 변환 1) 외부의 클라이언트가 요청을 보낸다. 2) DispatcherServlet은 적당한 Controller의 RequestMapping으로 위임한다. 3) Controller는 요청을 Model에 명령을 보내고 >> Model은 명령을 처리하여 갱신된 데이터를 전달하거나, 명령 처리의 상태에 대하여 알려준다. 4) Controller는 Model에서 받은 데이터를 표현할 View를 선정해서 ..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/b8JkNC/btsCX6IxK2A/otxoJjU3yyzWr14wI3UoXK/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. Client - Server Model (or Architecture) : 인터넷 브라우저에서 보는 페이지. 브라우저가 페이지를 제공할 때, 인터넷을 통해 페이지를 달라고 요청(클라이언트)을 보내면, 인터넷의 어떤 컴퓨터가 페이지를 응답(서버)해준다. - 클라이언트 : 인터넷에 연결된 장치 혹은 소프트웨어 프로세스. 서비스를 요청하는 주체 - 서버 : 사용자에게 전송될 데이터(웹 페이지, 이미지 등) 또는 기능이 저장된 컴퓨터 또는 프로세스. 요청에 대한 적당한 응답을 하는 주체 ** URL : 브라우저의 주소창 (어디에 요청을 보낼지를 입력하는 창) 자원(Resource)이 어디 있는지 나타내는(Locator) 기준 (Uniform) scheme : 어떤 방식으로 요청을 하는지 authority ..
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. Bean 자동 등록에 사용하는 어노테이션 1) @Repository - Data Access Layer의 클래스에 사용. - DAO(Data Access Object) 또는 Repository 클래스에 사용. 2) @Service - Service Layer의 클래스에 사용 3) @Controller - Presentation Layer의 MVC Controller에 사용. - 스프링 웹 서블릿에 의해 웹 요청을 처리하는 컨트롤러 빈으로 선정. 4) @Component - 위의 Layer 구분이 어려운 경우에 설정. 2. Controller 관련 어노테이션 @Controller - Spring의 컨트롤러를 의미 @RestController - Spring의 컨트롤러 중 View로 응답하지 않는 컨트..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bKa6tE/btsCIE1fSLO/aAmZSChLs7yz2mwfrnkoIk/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
Controller에서 정보 find 해서 프론트 html 화면으로 넘겨주는 과정에서 계속 문제가 생겼다... ㅠ ㅠ ㅠ ㅠ 일단 템플릿 파싱 문제가 여러가지 나왔는데 인자값을 어떻게 어떻게 바꿔주어도 해결이 안되었다... 아놔 마지막에 나온 오류가 이것이었다. Property or field ' ? ' cannot be found on object of type 'java.util.ArrayList' - maybe not public or not valid? 흠 필드/프로퍼티 뭐가 public이 아니라구여...? 먼소리얌........ 일단 냅다 써치 일단 내 원래 컨트롤러 코드가 이랬다. @GetMapping("/") public String todoList(Model model) { List tod..
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
application.yml파일에 spring: thymeleaf: enabled: true cache: false prefix: classpath:/templates/ suffix: .html encoding: UTF-8 mode: HTML 추가. 1) enabled : Thymeleaf 템플릿 엔진을 사용할지 여부 (true - 활성화) 2) cache : Thymeleaf 템플릿 캐시 사용 여부 (false - 비활성화) 3) prefix : 타임리프 템플릿 파일 위치 경로 지정. html 파일이 있는 경로를 설정해준다 (resources> templates>안의 html 파일들) 4) suffix : 타임리프 템플릿 파일의 확장자 지정. (.html 확장자 파일들임) 5) encoding : 타임..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/cy02cG/btsCDgLAfze/ght5EwTjT0xkHsdWhAqLk0/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
cmd 창에서 (윈도우) 1. 사용중인 포트 확인하기 (전체) : netstat -ano 혹은 특정 포트 사용중인지 확인하기 : netstat -ano | findstr {포트번호} >> 여기서 맨 오른쪽의 번호가 PID이다. (Process ID) >> 스프링 부트 실행 시 콘솔에서도 PID가 보인다. 2. 사용중인 포트 강제 종료 : taskkill /f /pid {PID} 이후 다시 확인해보면 종료되어 아무것도 뜨지 않는다.
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
기초개념 1) 단방향 : 한 쪽이 반대쪽을 참조하는 관계 양방향 : 서로가 참조하는 관계 2) 연관관계의 주인 연관관계는 FK로 관리 양방향 관계 -> 양쪽에서 매핑 -> 관리하는 주인이 필요 -> 이것이 연관관계의 주인 보통은 FK를 갖고 있는 엔터티가 연관관계의 주인~! (주로 n쪽) (ex. 자동차-바퀴 > 바퀴가 n이므로 주인) ** @ManyToOne (다대일 매핑) / @OneToMany (일대다 매핑) 양방향 매핑 예시 : Book과 Image로 하겠다. Book : Image = 1: n 1) Images (다대일) @ManyToOne @JoinColumn private Books books; 2) Books (일대다) : 주인이 아닌 쪽에 mappedBy속성을 넣어 매핑되는 컬럼명을 기입..
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. 즉시로딩 (EAGER) @Entity public class Book { @Id @GeneratedValue private Long id; ... } @Entity public class Board { @Id @GeneratedValue private Long id; ... @ManyToOne(fetch = fetchType.EAGER) @JoinColumn Book book; } // Book을 조회할 때 즉시로딩을 사용하겠다! 라는 뜻. > 이 때 즉시로딩 방식을 사용하면 Board를 조회하는 시점에 바로 Book까지 불러오는 쿼리를 날려 한번에 데이터를 불러온다. 2. 지연로딩 (LAZY) @ManyToOne(fetch = fetchType.LAZY) @JoinColumn Book book; ..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/mQ4y0/btszvI5M8jq/hEK1RmMcfnuK5225v8wY11/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. findall() 메소드를 사용해서 JSON 형태로 전체 Owner 목록 조회를 하려고 했다. 결과를 봤더니 (???) 띠용~~~~~~ 무한......으로 계속 나와서 왔다리 갔다리 나오면서 StackOverFlow 에러가 나온다. 이유는 Owner 클래스에서는 pets 객체를 불러들이고 Pet 클래스에서는 owner 객체를 불러들인다.. 그러면 얘가 쟤를 부르고 쟤가 얘를 부르고 왔다갔다 계속 서로를 불러들인다... 이 것을 멈추기 위해서는 여러가지 방법이 있는데 나는 DTO를 만들어주는 방법을 사용했다. 데이터를 DTO라는 껍데기에 넣어주기로 했다. "응답용 객체"로 만들어주기. 1. OwnerResponse 객체 클래스를 생성한다. (DTO) 여기에 Owner의 정보를 OwnerResponse..