분류 전체보기
로그인 세션 과정과 세션에 대한 문제점
위 사진에 로그인 과정이 나와있다. 그렇다면 여기서 문제점은 무엇일까? 클라이언트가 엄청 많을 때 동시 접속자 수도 엄청나다. 이 때 문제점이 생긴다. 만약 1개의 서버가 100명을 감당할 수 있다고 생각하자. 동시접속자 수는 300명이므로 서버를 2개 더 늘린다. 이 때 요청할 때마다 원활한 서버로 요청을 보내게 되는데 이것을 로드 밸런싱이라고 한다. 1번 서버에서 로그인 과정을 거치고, 다시 2번 서버에 요청을 보내면 또 다시 로그인 과정을 거쳐야한다. 여기에 대한 해결 방안은 무엇이 있을까? 1. 최초 요청에는 무조건 하나의 서버에만 요청이 가는 방법 2. 모든 서버 세션에 복사해주는 방법 3. 모든 서버들이 하나의 DB에 세션을 저장하여 사용하는 방법 이 모든 방법들이 복잡하고 느리다. 3번은 H..
스프링부트 시큐리티 - SNS 로그인과 SNS 회원가입
https://ssdragon.tistory.com/83 스프링부트 시큐리티 - 일반 로그인과 회원가입 Spring Boot DevTools Lombok Spring Web Spring Data JPA H2 Database OAuth2 Client Thymeleaf 위 라이브러리들을 추가하여 스프링 시큐리티 예제를 만들어보자. implementation 'org.springframework.boot:sp.. ssdragon.tistory.com 이전 프로젝트에서 이어서 하겠다. 스프링 시큐리티 구글 https://console.cloud.google.com/apis/dashboard Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을..
스프링부트 시큐리티 - 일반 로그인과 회원가입
Spring Boot DevTools Lombok Spring Web Spring Data JPA H2 Database OAuth2 Client Thymeleaf 위 라이브러리들을 추가하여 스프링 시큐리티 예제를 만들어보자. implementation 'org.springframework.boot:spring-boot-starter-security' 아 그리고 제일 중요한 Security를 추가하지 않았는데 이 때는 build.gradle에 위 코드를 추가하여 시큐리티를 설치하자. 설치가 끝나고 스프링을 시작하여 http://localhost:8080으로 바로 들어가면 스프링 시큐리티가 제공하는 로그인페이지가 나온다. 이렇게 패키지를 만들어두고 이 구조를 기준으로 설명하겠다. 먼저 domain 패키지에 ..
IntelliJ 파일 업로드 주의사항
https://ssdragon.tistory.com/99 [Spring] 스프링에서 파일저장하기 https://ssdragon.tistory.com/82 [Spring] IntelliJ 파일 업로드 주의사항 @PostMapping("/filetest") public String addImage2(@RequestParam("Photo") MultipartFile uploadFile, HttpServletRequest request).. ssdragon.tistory.com 파일 저장은 위 게시글을 살펴보자. @PostMapping("/filetest") public String addImage2(@RequestParam("Photo") MultipartFile uploadFile, HttpServletRe..
Entity 보다는 DTO로 반환하자.
클라이언트의 요청에 응답하여 보낼 때 Entity로 보내는 경우가 있다. 이럴 때 주의해야할 점을 확인해보자. 1. Entity 반환 시 클라이언트에 과도한 정보 반환 Entity를 반환하면 테이블 공개나 다름없으므로 보안 문제가 있음 (즉, Entity를 UI계층에 노출하는 것은 X) 필요 이상으로 요청과 응답을 한다면 속도 문제 발생 따라서 DTO로 클라이언트에 필요한 값만 반환하는 것이 좋음 2. 양방향 연관관계에서 무한 반복이 일어날 수 있으므로 DTO로 두는것이 좋다. Entity가 서로 참조하는 객체를 계속 호출하는 경우가 생길 수 있음. (e.g. toString) Entity 반환이 잘 되더라도 추후 양방향 연관관계를 추가하고, JSON 직렬화 하다가 무한 반복 발생이 가능 3. Valid..
[백준] 3003번 - Java(자바)
백준 3003번 자바 https://www.acmicpc.net/problem/3003 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다. www.acmicpc.net 문제내용은 아래 더보기를 누르면 나온다. 더보기 알고리즘 체스 16개의 피스 킹, 퀸, 룩, 비숍, 나이트, 폰 의 개수를 배열로 저장하여 비교한다. (1개, 1개, 2개, 2개, 2개, 8개) 첫째 줄에 동혁이가 가지고 있는 피스와 비교하여 빼야하는지 더해야하는지 구한다. 1. 체스 배열 chessArr = {1, 1, 2, 2, 2, 8} 을 만든다. 2. 체스 배열의 길이만큼 반복한다. 2-1..
[백준] 2292번 - Java(자바)
https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 문제내용은 아래 더보기를 누르면 나온다. 더보기 알고리즘 육각형으로 이루어진 방들이 중앙의 1번부터 시작해서 이웃하여 퍼져나간다. 숫자 N은 1,000,000,000 이하까지 주어진다. 1에서 N번방까지 최소 몇 개의 방을 지나가는지 시작과 끝을 포함하여 출력하면 된다. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 위 이미지 오른쪽에 숫자에 따른 거리를 한 줄씩 표시했는데 +6 단위로 거리가 ..
JPA 객체 생성 방법
객체를 생성할 때는 다음 3가지 방법 중 사용하게 된다. 생성자 정적 팩토리 메서드 Builder 패턴 엔티티 상황에 따라서 이 중 한가지를 선택하고, 파라미터에 객체 생성에 필요한 데이터를 다 넘기는 방법을 사용한다. 정적 팩토리 메서드와 Builder패턴을 사용할 때는 생성자를 private 처리를 하는데 JPA가 사용을 해야한다면 protected로 처리한다. 객체 생성이 간단하면 단순 생성자를 사용하지만, 의미가 있거나 복잡하다면 나머지 방법을 사용하는 것이 좋다. 엔티티를 만들 때는 외부에서 값을 쉽게 변경할 수 없게 @Setter 를 사용하지 않는다. Setter는 의도가 분명치 않고, 변경하면 안되는 중요한 값임에도 변경가능한 값으로 착각할 수 있다. (안전성 보장x) 그러면 어떻게 값을 변..