Programming/Spring, SpringBoot
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/mPMk3/btsDJfxrwMV/5oktQbo5FxafM14OGWY7k1/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
Query Parameter 활용 : 기본 CRUD와 더불어 요구하는 자원은 동일하지만, 요구하는 자원에 특정한 동적인 조건을 덧붙이는 방법. - URL 구성요소 중 ? 뒤의 요소. ex) http://example.com/path?query=keyword&limit=20 - 페이지, 검색 등의 기능. - key(인자이름) = value(값) 형식으로 활용 - 각 인자는 &로 구분. 1) @RequestParam : @RequestParam을 이용해 Query의 인자를 받아올 수 있다! defaultValue : 기본값 설정 (문자열로만 줄 수 있다) required : 필수 포함 여부 @RestController @Slf4j public class QueryController { @GetMapping(..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/wLzju/btsDyPOaC8y/KlTDwdfYgpukBJluFZkStk/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. REST (REpresentational State Transfer) : HTTP를 이용한 서버를 구현할 때 지켜야 하는 설계 원칙. 표현을 이용해서 상태를 전달한다. - 서버와 클라이언트 사이의 결합성 감소에 목표를 둔다. -> 성능 향상, 확장성 확보, 사용 편의성 증대. 6원칙 1) Client - Server Architecture : 클라이언트와 서버의 역할 분리 - 양측의 독립적 발전 추구. - 서버는 데이터가 어떤 방식으로 표현되는지 몰라도 됨 & 클라이언트는 데이터가 어떻게 저장되는지 몰라도 됨. 2) Statelessness (상태를 저장하지 않는다.) : 클라이언트가 보내는 개별적인 요청은 각각의 요청을 표현하기 충분해야 함. "독립적인 요청" - 즉, 서버/클라이언트가 몇번째 보..
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/coYix9/btsDxm4xOFI/VQU92F9BJFnkDnVv244roK/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
Spring Profiles : 다양한 설정을 Profile이라는 단위로 나누어 사용할 설정을 어플리케이션 실행시 결정할 수 있게 해주는 스프링의 기능. > 개발 단계에서 사용할 데이터베이스와 테스트 코드용 데이터베이스를 나누거나 서비스할 때 로그를 줄이고 싶은 경우 ** application-{profile}.yaml 1) 사용하고 싶은 profile 이름을 정한다. (dev, test, prod...) 2) 그 이름이 포함된 yaml을 만든다. - application.yaml 설정이 기본으로 실행된다. >> 기본 profile 설정 : spring.profiles.default // application.yaml // 특별한 인자 없이 프로젝트 실행시 application-dev.yaml을 사용해서..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/HK2V1/btsDsYiFsiF/WLEx0sPDjSCyBZPZ6pdsLK/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. Logging System.out.println : 콘솔창에 인자를 출력한다. 그러나, 실제 서비스 중인 어플리케이션의 콘솔을 계속 보고 있을 수가 없다....!! 어플리케이션이 실행중일 때 일어난 일들을 기록하는 것이 좋겠다! ! >> 를 로그로 남긴다! - Logging : 로그를 남기는 행위 - Logger : 로그를 작성하기 위해 사용하는 객체 1) Slf4j - Simple Logging Facade 4 Java : Java에서 로그를 남기는 방법을 통일해주는 프레임워크 - 자기 자신을 로그를 남기는 프레임워크가 아니라.... 다양한 로그 프레임워크를 사용하는 방법의 Facade(디자인 패턴)일 뿐이다! package com.example.article; import lombok.exter..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/cm3n14/btsDqN3aXAY/isM7ehkmuLFEi8AKVVQOEK/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
보통 IoC Container가 싱글턴 패턴으로 빈 관리 - Bean 객체로 등록하기 위한 annotation 1) @Component : 가장 기초가 되는 Annotation (@ComponentScan의 대상) - 직접적인 비즈니스 로직에서 벗어난 기능들 (외부 API, 다수 구성 요소의 공유 가능 기능 등..) - 다른 어노테이션을 쓰기 애매할 때 사용. 2) @Controller >> Presentation : MVC 패턴의 컨트롤러, 즉 사용자 입력 담당 요소 - 주로 @RequestMapping과 함께 사용 3) @Service >> Business Logic : 서비스의 주요 흐름, 비즈니스 로직을 담당하는 요소 - 여러 요소들의 기능을 조합해 실제 서비스를 제공하는 주요 기능 ~> @Con..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/O1GCq/btsC2CPn62Z/kV3kP0EKK7dkk1vadn4lS0/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. JPA 시작 1) ORM (Object Relational Mapping) : 객체지향적 관점에서 객체를 사용하여 관계형 데이터베이스를 사용하는 기술. - 객체를 테이블 및 레코드에 매핑. - 관계 자체를 객체의 형태로 활용하며 객체의 데이터를 SQL을 실행하는데 활용하는 형태가 아닌, 객체를 저장하는 행위를 데이터베이스에 반영하는 부분까지 포함한다. - 생산성이 증가하고, 데이터 변환 과정을 간소화해 코드 중복을 줄이며 데이터베이스 의존성을 줄이게 된다. - 실제 SQL을 작성하지 않고 위임하기 때문에 성능에 영향을 미치기도 한다. 2) JPA와 Hibernate - JPA : 데이터가 어떻게 테이블에 매핑되는지 명세하기 위함. 인터페이스와 어노테이션으로 구성! @Entity public clas..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/cGqrBr/btsCZ5DpX5H/RuE6kCorxkhQKmDKQO5Ri0/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. MyBatis Framework - JDBC만 이용해 데이터베이스를 쓴다면...? 복잡하고 실수하기 쉽다.. ㅠㅡㅠ public void executeInsert(Student student) { String sql = "INSERT INTO student (name, age, phone, email) VALUES (?, ?, ?, ?)"; try (Connection connection = dataSource.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)){ statement.setString(1, student.getName()); statement.setInt(2, student.getAge());..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/ABvhZ/btsC2AQe5ZF/JIGAHPzFSU8hbCrssfdaaK/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
Post 요청 후 return이 다시 그 입력받은 html 페이지로 설정되어 있으면 @GetMapping("/create-view") public String createView() { return "create"; } @PostMapping("/create") public String create(@RequestParam("name") String name, @RequestParam("email") String email ) { StudentDto student = service.createStudent(name, email); log.info(student.toString()); return "create"; } 새로고침을 하면 이러한 알림창이 뜬다. >> 이 알림은 사용자가 처음 GET 요청을 받은..