-
쓰면서 배우는 스프링(부트) 로그인 관련 기능 테스트 피드백 받은 내용 중 가장 뼈져리게 아픈 부분은 테스트 케이스를 작성하면서 실패 케이스를 깜빡했다는 것 테스트 케이스를 작성할 때에는 성공 케이스보다 실패 케이스가 더 중요함 : 실패 케이스일 때 브라우저가 어떤 응답을 받을지 테스트 꼭 해야함 @Test public void login_fail_invalid_password() { String userId = "javajigi"; builder.addParameter("userId", userId); builder.addParameter("password", "1111"); HttpEntity<MultiValueMap<String, Object>> request = builder.build(); ResponseEntity<String> response = template.postForEntity("/users/login", request, String.class); assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); } @Test public void login_fail_invalid_userId() {...
-
ajax로 서버에 콜하기 ajax란? asyncronous javascript and xml의 줄임말 비동기로 서버에 요청을 하고, 응답 데이터를 받아 랜더링까지 하는 기술 : 백그라운드 작업, 부분적으로 새로고침 효과를 얻을 수 있음 응답 데이터로 초기에는 xml을 사용하다가 json을 사용함 json이란? 자바스크립트는 아니지만 자바스크립트의 객체 문법처럼 짜인 데이터 key - value로 맵핑되어있음 : 변수에 json을 할당하면 변수.key로 value를 찾을 수 있음 json docs 보기 xml 대신 json을 사용하는 이유? 가벼움 : xml은 마크업 언어로 의미있는 태그 내에 데이터가 감싸져있는 형태...
-
스프링부트 일급객체 사용하기 : @Embeddable, @Embeded 객체지향적으로 코드 변경하기 : 컬렉션을 그대로 사용하지않고, wrapper 클래스를 만들어 객체.메소드로 요청하게끔 코드 짜기 응집도가 높은 엔티티를 분리해서 각각 관리하면서(역할 분리 - 유지보수에 유리함) 쓸 때는 하나에서 쓸 수 있게 객체지향 생활체조 원칙 객체지향 언어를 쓰면서 객체지향 개발을 지양하는 개발자가 되지말자! @Entity public class Question { . . . @Embeded private Answers answers; . . . } @Embeddable public class Answers { @OneToMany(mappedBy = "question") @Where(clause = "deleted =...
-
스프링부트 스프링 인터셉터 - 로그인 확인 로그인 기능이 들어가는 기능마다 세션 확인 로직을 구현하거나 각 컨트롤러마다 별도 메소드로 빼고 사용하는 방식으로 개발해야하는데, 각각 구현해두지않고 별도로 구현해두고 요청이 들어왔을 때 거치도록 하는 방법이 있음 방법 : 인터셉터, 필터 공통적으로 처리해야하는 로직을 구현해두고, 공통적으로 처리되도록 하는 기능 필터와 인터셉터의 차이 필터 : J2EE에서 정의된 기능, Dispatcher Servlet(아래 설명)의 앞단에서 처리(스프링 컨텍스트 외부, 스프링과 무관한 자원에 대해 동작) 인터셉터 : 스프링 프레임워크에서 자체적으로 제공하는 기능, Dispatcher Servlet에서 컨트롤러로...
-
스프링부트 Entity 관계 설정하기 : 게시글 쓰기 관계를 설정해주기위해서 테이블에 관계 키를 설정해줘야함 : FK(foreign key) 외래키 FK : 테이블의 컬럼 중 다른 테이블의 레코드를 같이 조회(참조)하기위해 필요한 키 - 다른 테이블의 ID를 FK로 사용함(데이터 무결성을 보장하기위해 - NULL이거나 존재하거나(PK)) 관계 설계하기 어디에서 조회할 것인지에 따라 단방향, 양방향 관계 맺기가 가능함 : 어노테이션으로 관계를 설정할 수 있음 게시글 쓰기 : 1명의 유저가 여러 게시글 ID를 가지는 레코드를 저장할 수 있으니 OneToMany, 여러 게시글은 레코드 저장할...
-
리눅스 커널과 배포판의 프리 소프트웨어 리눅스는 리눅스 커널(OS 핵심)과 리눅스 배포판을 구성하는 프리 소프트웨어(배포판 사용자들에게 편의 제공을 위한)에 의해 구성됨 배포판에는 ubuntu, opensuse, redhat 등이 있음 터미널 에뮬레이터와 쉘 그리고 쉘프롬프트 터미널 (에뮬레이터) : 쉘에 접근할 수 있도록 하는 프로그램 쉘 : 사용자의 명령을 운영체제에 전달(번역)하여 실행될 수 있도록 함 쉘프롬프트 : 쉘이 입력가능할 때 나타나는 명령줄 달러($)가 아닌 # 이라면 현재 슈퍼 유저로 쉘을 사용할 수 있는 것 [ubuntu] $ 터미널 세션 종료 :...
-
자바 어노테이션 java 1.5부터 추가된 기능 소스코드에 메타코드(추가적인 정보)를 붙이는 것 추가적인 정보에 따라 기존의 실행과 다르게 실행될 수 있음 컴파일, 런타임 모두 활용 가능 컴파일 타임에 메타 데이터가 적용된 코드에 코드를 추가할 수도 있고, 런타임 때 메타데이터에 의해 실행 흐름이 바뀔 수도 있음 런타임에는 리플렉션을 활용해서 어노테이션이 적용되어있는지 체크할 수 있음 @Override public String toString() { } 사용자 정의 가능함 : 정의 -> 사용 -> 실행 Annotation 파일 만들기 Annotation 적용되었는지 리플렉션으로 확인 /*...
-
스프링부트 h2 데이터베이스 연결 - 사용하기 데이터베이스 사용 : 메모리에 저장하면 프로세스 종료 후 데이터가 모두 날아감, 데이터를 공유하기위해서 복잡도가 높아질 수 있음 복잡도 문제 : 접근 객체(XXXRepository)만 만들면 됨, 같은 곳 접근 JDBC : DB 변경할 때마다 코드 변경을 최대한 없애기위해 표준 인터페이스를 마련함 h2 : 순수 자바로 짜여진 임베디드 데이터베이스, jar 파일만 임포트하면 사용할 수 있음(타 db는 드라이버 임포트까지 해줘야함) JPA : 데이터베이스 테이블을 객체지향적으로 다루는 ORM의 표준 인터페이스 - 구현체로 Hibernate 등이...
-
스프링부트 redirect 처리하기 redirect 란? 요청에 대한 처리 후 응답할 때 새로운 URI와 응답코드(3xx)를 주어서 클라이언트가 새로운 URI로 요청하도록 만드는 것을 말함 @Controller @RequestMapping("/users") public class UserController { private Users users = new Users(); @GetMapping public String show(Model model) { model.addAttribute("users", users.get()); return "/users/list"; } @PostMapping public String create(User user) { users.add(user); return "redirect:/users"; } } POST /users 에 대한 처리 후 redirect 응답 : 아래는 이에 대한 리스폰스 메세지 클라이언트(웹브라우저)는 Location으로 재요청함(이전 요청과는 전혀...
-
통신 쌍방 간의 통신 요청과 응답 프로토콜 통신을 위해 꼭 필요함 통신 상대를 찾기도, 어떤 내용을 어떻게 전달할지도 약속에 의해 모든게 진행됨 : 서로 다른 하드웨어, 소프트웨어 환경 TCP/IP 네트워크에 연결된 컴퓨터(IP Address 부여)간에 데이터(패킷 형태로 됨)를 주고 받기위한 프로토콜 프로토콜에서 핵심적으로 사용되는 프로토콜이 TCP(패킷 프로토콜 - 연결을 어떻게 하고, 데이터 순서 형태), IP(인터넷 환경 프로토콜 - 어느 라우터로 가야할지)라 TCP/IP로 불림 계층형 프로토콜 : 한번에 정보를 작성하는게 아니라 4개의 계층별(각각 프로토콜 그게 4개)로 각각이...