본문 바로가기

JAVA/Spring

(14)
영속성 컨텍스트, json 통신 @Transactional @PutMapping("/dummy/user/{id}") public User updateUser(@PathVariable int id, @RequestBody User requestUser) { System.out.println("id: "+id); System.out.println("password: "+requestUser.getPassword()); System.out.println("email: "+requestUser.getEmail()); User user = userRepository.findById(id).orElseThrow(()->{ return new IllegalArgumentException("수정에 실패하였습니다."); }); user.setPassw..
Json, RestController, 페이징 JSON은 왜 나왔고, 어떻게 사용하는가? 프랑스인, 일본인, 독일인이 한국인과 데이터를 교류한다면 한국인이 프랑스어, 일본어, 독일어를 배우는 것보다는 프랑스인과 일본인과 독일인이 한국어를 공부하는게 더 효율적이다. 하지만 한국인이 미국인으로 바뀌게 된다면? 통신이 중지된다. 따라서 모두가 사용할 수 있는 공용어를 정하고 그것을 모두가 공부하고 그것으로 통신을 하면 문제가 해결된다. 모든 사람들은 데이터를 전송 시에 자기나라 언어를 공용어(예: 영어)로 번역하고, 마찬가지로 모든 사람들은 데이터를 응답받을 때 영어를 자기나라 언어로 번역하는 것이 이상적인 프로토콜이 된다. 서로 다른 오브젝트는 이해할 수 없다. 자바데이터를 보내면 파이썬은 이해할 수 없다. 따라서 공용어를 만들게 되는데 이것을 Json..
JPA 테이블 생성하기, 연관 관계 JPA 테이블 생성하기 Blog 테이블 만들기 (user, board, reply 테이블) User 테이블 : 유저 Board 테이블 : 게시글 Reply 테이블 : 답변(댓글) 연관관계 만들기 더미 데이터 insert 본격적으로 DB의 테이블을 만들기 위해 스프링부트 패키지 이하에 model 패키지를 만들고 안에 User, Board, Reply 클래스를 만든다. model 패키지란? 테이블을 만들고 관리하기 위한 패키지이다. 모델 패키지의 테이블에는 User, Board, Reply가 있으며 모든 테이블엔 PRIMARY KEY가 있어야 한다. 테이블화 하기 위해서 Entity 어노테이션을 붙인다. PRIMARY KEY를 만들기 위해서 Id 어노테이션을 붙인다, PRIMARY KEY는 오라클의 시퀀스 ..
yml 파일 설정, jsp 파일 스프링에서 설정을 바꿀땐 application.yml의 설정을 건들면 된다. application.yml 파일에 모든 설정들을 하면 되고 규칙은 yaml파일의 규칙을 따른다. 스프링은 프로젝트에 진입하기 직전 application.yml 파일을 읽고 시작하게 된다. 다음과 같이 yml 파일을 설정하였다. server: port: 8000 servlet: context-path: /blog encodinsmg: charset: UTF-8 enabled: true force: true spring: mvc: view: prefix: /WEB-INF/views/ suffix: .jsp datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysq..
Maven과 라이브러리/Builder 패턴/yaml 설정 Maven과 라이브러리 프로젝트에 라이브러리를 적용하기 위해서는 어떤 과정을 거칠까? 라이브러리가 필요하면 일단 해당 사이트로 가서 라이브러리를 다운 받고, 다운 받은 파일을 내 프로젝트 내부에 복사하고 빌드 한다. 그러면 특정 라이브러리가 필요할 때 import해서 사용할 수 있다. ex) 프로젝트 이름이 blog라면 필요한 라이브러리인 ojdbc(오라클) 드라이버를 사용하기 위해서 첫번째로 오라클 사이트에서 드라이버를 다운한 뒤 lib 폴더를 만들어 해당 파일을 복사한다. 복사 후에 프로젝트가 인식할 수 있도록 빌드를 한다. 다른 프로젝트에서도 해당 라이브러리를 사용한다면 그 프로젝트에 lib 폴더를 만들어 복사를 하고 빌드를 하는데, 이렇게 복사하지 않고 프로젝트 외부에 따로 폴더를 만들어 그 폴더..
포스트맨 실습 : 데이터 요청하기 1. 데이터 보호하기 자바에서는 값을 바로 수정할 수 없게 하기 위해서(데이터를 보호하기 위해) 변수를 private으로 만든다. 객체지향에서는 변수를 private으로 만들고 메소드를 통해 변수 값이 변할 수 있게 만들어야 한다. private int hungry = 50; public void eat() { hungryState+=10; } 함수를 통해 값에 접근한다!! 변수의 상태는 메소드에 의해 변경된다. 2. source에서 getter와 setter + constructor(생성자) 만들기 private int id; private String username; private String passward; private String email; public Member(int id, Strin..
http의 요청방법과 통신방식, header와 body HTTP 1.1 (GET, POST, PUT, DELETE) 기본적으로 통신을 위해서는 두 개의 대상에 스트림이 연결되어야 한다. 여기서 연결되는 스트림은 바이트스트림이라고 해서 이 선에 파일 비트가 왔다갔다하며 통신을 한다. 서로 두 개의 스트림으로 연결되어 하나는 write, 하나는 read를 하는데 이것이 일반적인 통신의 방법이다. 요청은 항상 클라이언트가 하며, 응답은 서버가 한다. http 통신은 데이터를 가지고 있는 서버(갑) 입장에서는 데이터를 요청하는 클라이언트(을)이 궁금하지 않고, 클라이언트가 서버에게 데이터를 요청하면서 서버가 응답을 하는데 이 때 클라이언트가 요청하는 약속된 방법이 get, post, put, delete이다. 1. GET 요청 -데이터를 줘(데이터를 요청) -데이터..
프로젝트 만들기 본격적으로 프로젝트를 만들기에 앞서 몇 가지 셋팅을 먼저 해보려고 한다. 우선 스프링에서는 어노테이션을 붙여서 스캔하는 파일을 제한할 수 있다. 컨트롤러 클래스를 만들어서 스캔하는 파일을 제한한다. 컨트롤러 -스프링이 패키지이름 이하를 스캔하여 모든 파일을 메모리에 new 하는게 아닌 특정 어노테이션이 붙어있는 클래스 파일만을 new해서(IOC) 컨테이너에서 관리해준다. @RestController public class BlogControllerTest { //주소 이름을 입력받음 //http://localhost:8080/test/hello @GetMapping("/test/hello") public String hello() { return "hello Spring boot"; } } MySQL 환..
[스프링] 패키지 이름, UTF-8 스프링과 패키지 이름(제어의 역전) 스프링부트에서 패키지를 만들때에는 이름을 com.seo.blog 이하로 만들어야 한다. 스프링은 제어의 역전을 해서 스프링이 직접 객체를 new해서 메모리에 띄우기 때문이다. 싱글톤 패턴 : 레퍼런스 변수를 스프링이 관리해주겠다는 것 기존의 자바에서는 클래스를 new 하면 메모리 안에 공간을 만들고 클래스 변수가 가리키게 된다. 클래스의 메소드는 스택 메모리에 띄워지며 호출이 되면 메모리 안에 만들어지고 호출이 종료되면 메모리에서 사라진다. 지역변수 -> 스택 전역변수 -> 힙 스택에서 객체를 만들면 결국 지역변수가 관리하기 때문에 다른 스택에서 공유하여 사용할 수 없고, 메소드 내의 변수에 접근하기가 어려워진다. 따라서 전역변수로 선언해서 힙으로 관리하는 등의 방법을..
스프링 컨테이너 스프링 컨테이너의 전체적인 순서는 다음과 같으며, 사용자가 요청하기 전에 서버가 켜져야 하는데 이 때 생기는 일들이다. 서버가 켜지고 톰켓이 실행되면 문지기 역할을 하는 web.xml이 호출되고, 자신이 해야하는 일들을 확인한다. 그 다음에 데이터베이스와 관련된 객체들(모든 스레드가 공유하는 자원)을 컴포넌트 스캔에서 메모리에 올린다. *이 때 root-context 파일이 읽어진다. 이렇게 서버가 로딩이 되면 사용자에게 request 요청이 들어오게 되면서 디스패처 서블릿이 동작하게 되는데, web.xml이 해야하는 역할을 자신이 대신해서 웹과 관련된 자원들을 메모리에 띄우고 주소 분배를 한다. *이때는 servlet-context 파일이 읽어진다. 모든 요청이 끝나면 데이터로 응답할지, html 파일..