OAuth 사용자의 정보를 가지고 있는 제3의 서비스로부터 접근 권한을 위임 받아서 웹 사이트의 자원에 접근하는 방식 사용자의 정보를 저장하고 관리해야 하는 부담을 줄일 수 있다. 사용자도 자신의 개인정보를 신뢰할 수 없는 타인에게 제공하는 단점을 해결한다. OAuth 제공자는 네이버, 카카오, 구글 등이 있다. JWT Header, Payload, Signature로 구성된 암호화된 토큰 session 기반 인증 방식과 달리 stateless한 구현이 가능하다. 로그인 흐름 Resource Owner(사용자)가 Client(서버) 자원에 접근하려 하면 Resource Server(OAuth 제공자)의 로그인 창을 호출하여 인증을 요구한다. 로그인을 성공하면 Resource Server에 로그인 API..
자료구조란? 데이터를 추가, 삭제, 검색에 있어서 효율적으로 사용할 수 있도록 구조를 만들어서 저장해 둔 것 모든 자료구조 클래스에는 래퍼런스 타입의 데이터만 저장할 수 있다. java.util 패키지에 속하는 JDK 라이브러리의 자료구조 클래스들 자료구조 클래스 이름 리스트 ArrayList, LinkedList, Vector 스택 LinkedList, Stack 큐 LinkedList 해쉬 테이블 HashMap, Hashtable 집합 HashSet List 데이터를 일렬로 늘어놓은 자료구조 중복된 데이터를 저장하고 순서를 유지하는 선형 자료구조 선언 // ArrayList 선언 // 인덱스로 데이터 항목을 찾는 일이 많은 프로그램에서 유리함 ArrayList list = new ArrayList()..
i18n internationalization의 축약형 총 20자리 글자 중에 맨 앞 i와 맨 뒤 n을 제외한 나머지가 18글자가 있다고 해서 i18n 이다. MessageSource란? 국제화(i18n)를 지원하는 스프링 인터페이스 하나의 메세지에 대해서 다국어로 표시해주는 기능 제공 Entity 생성 @Entity @Getter @Setter public class Languages { @Id @GeneratedValue private Integer id; private String locale; private String messageKey; private String messageContent; } sample data 생성 쿼리 작성 src/main/resources 경로에 data.sql 파일..
얼마전 동료한테 디버깅 요청을 받았다. 어떤 값을 받아서 크기를 비교해서 예외를 처리하는 구문이었는데 테스트를 진행하면 예상과 반대의 결과가 나왔다. 나는 1초만에 감이 왔다. 오버플로우... 바로 Long 타입으로 바꿔보라고 말했고 바로 해결할 수 있었다. 그러면 오버플로우가 발생하면 값이 어떻게 되었길래 예상과 다른 결과가 나왔을까? 분명 예전에 공부하면서 알았지만 기억나지 않아서 다시 테스트해본다. Integer란? 자바의 정수형 타입 중 하나이다. 크기 -2147483648 ~ 2147483647 테스트1 int maxValue = 2147483647; int minValue = -2147483648; System.out.println(maxValue); System.out.println(minV..
기존 AdoptOpenJDK는 Apple Silicon을 지원하지 않기 때문에 Apple Silicon을 지원하는 Zulu JDK로 교체한다. 기존 JDK 제거 cd /Library/Java/JavaVirtualMachines/ ls adoptopenjdk-11.jdk sudo rm -rf adoptopenjdk-11.jdk /Library/Java/JavaVirtualMachines/ 경로로 이동 후 현재 설치되어 있는 JDK 폴더를 확인한다. ex)JDK종류-버전.jdk 기존에 설치된 JDK를 rm -rf 명령어로 제거한다. Zulu JDK 설치 환경변수 설정 기존 JDK가 설치되어 있던 /Library/Java/JavaVirtualMachines/ 경로로 가보면 새로 설치한 Zulu JDK 폴더가 ..
문제 sudo: no tty present and no askpass program specified. 메세지가 나오면서 CI/CD가 안 될 경우 해결 sudo vi /etc/sudoers 명령어로 파일을 열어서 아래 내용을 스크린샷과 같은 위치에 추가한다. gitlab-runner ALL=(ALL) NOPASSWD: ALL E45: 'readonly' option is set (add ! to override) 메세지가 나오면서 저장이 안 될 경우 :w! 명령어로 강제 저장한다. 문제 Job's log exceeded limit of 4194304 bytes. Job execution will continue but no more output will be collected. 위 에러는 gitlab-r..
1. 우분투 리눅스에 gitlab-runner 설치 Install GitLab Runner manually on GNU/Linux | GitLab Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner. docs.gitlab.com 2. runners 등록하기 GitLab 저장소 -> Settings -> CI/CD -> Runners -> Expand 만약 아래와 같이 초록색 동그라미가 보인다면 다시 등록할 필요가 없다. 그렇지 않다면 아래 내용을 띄워둔다. 그리고 개발 서버 터미널에서 아래와 같이 명령어를 입력하고 등록 과정을 진행한다. sudo gitlab-runner..
프록시란? 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라 한다. 지연 로딩 기능을 사용하기 위해 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라 한다. 프록시 사용 엔티티를 실제 사용하는 시점까지 데이터베이스 조회를 미루고 싶으면 EntityManager.getReference() 메소드를 사용하면 된다. Member member = em.getReference(Member.class, "Member1"); PersistenceUnitUtil.isLoaded(Object entity) 메소드를 사용하면 프록시 인스턴스의 초기화 여부를 확인할 수 있다. boolean isLoad = em.getEnti..
상속 관계 매핑 1. 조인전략 Joined Strategy: 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략 @Entity @Inheritance(strategy = InheritanceType.JOINED) //조인 전략 사용 @DiscriminatorColumn //컬럼명:dtype public abstract class Item { @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; private String name; private int price; } @Entity //@DiscriminatorValue("A") //DiscriminatorValue를 지정하지 않..
객체의 참조와 테이블의 외래 키 매핑 방향 방향은 객체에만 존재하고 테이블 관계는 항상 양방향이다. 단방향 두 관계 중 한 쪽만 참조하는 것 양방향 두 관계 양쪽 모두 서로 참조하는 것 다중성 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N)이 있다. 연관관계의 주인 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다. 연관관계의 주인은 외래 키의 위치와 관련해서 정한다. ex) 회원과 팀 관계에서 외래 키가 있는 "다" 쪽인 회원이 연관관계의 주인이 된다. 객체 연관관계와 테이블 연관관계의 차이 객체는 참조(주소)로 연관관계를 맺는다. ex) a.getB().getC() 테이블은 외래 키로 연관관계를 맺는다. ex) A JOIN B 참조를 사용하는 객체의 연관관계는 단방향..