분류 전체보기

· 면접
String a = "abc" 라고 만든 변수가 있고, String b = new String("abc") 라고 만든 변수가 있습니다. 이 두 개를 '==' 으로 비교하게 되면 false가 나오는데 왜 그런 건가요? 되게 간단한 질문이라고 생각한다. 기본적으로 String에서 == 비교와 equals()로 비교를 했을 때 차이점을 알고 있냐는 질문과 유사하다. 우선 자바 메모리 구조가 어떻게 되는지 사진으로 알아보자. String a = "abc"; 리터럴로 a라는 변수에 값을 할당했다. 이렇게 하면 스트링 풀에 "abc"라는 값이 생성되기 된다. 새로운 그 다음 새로운 값을 만들어서 비교해보면 String a = "a"; System.out.println(a.hashCode()); String c = ..
· 기타
기존 프로젝트에서도 JWT랑 시큐리티, Oauth를 사용했지만 이번에는 jwt 저장 방법을 변경해보려고 한다. 기존 방법 액세스 토큰 -> json으로 넘겨서 클라이언트가 로컬, 세션 스토리지에 저장해서 관리. 리프레시 토큰 -> 쿠키에 저장해서 secure, httpOnly, sameSite 옵션을 걸음. 리프레시 토큰은 쿠키에 저장해서 보안성을 챙겼지만 액세스 토큰을 스토리지에 저장한다는 게 마음에 걸렸다. 그래서 액세스 토큰도 쿠키에 같이 저장하기로 하였다. 변경 방법 아래 설명은 스프링부트 Oauth 라이브러를 사용해서 successHandler까지 도달했다는 가정 하에 진행한다.(즉 인증코드를 액세스 토큰으로 바꿔서 접근 권한을 획득한 상태) @Override @Transactional publ..
· 오류해결
프로젝트를 진행하면서 유저 로그인을 진행하는데 406 에러가 발생하는 상황이 있었다. 스프링부트와 리액트를 사용했고 내부 서비스는 전부 동작해서 DB에 값 수정까지 됐지만응답을 하는 과정에서 406 에러가 발생했다. 나는 ApiResponse를 따로 만들어서 json 응답을 생성하였다. package com.parkchoi.scrum.util.api;public class ApiResponse { // 상태 구분1 private static final String SUCCESS_STATUS = "success"; private static final String FAIL_STATUS = "fail"; private static final String ERROR_STATUS = "er..
· 면접
최근에 SSAFY를 통해 한 기업에서 면접을 보게 되었다.풀스택을 뽑는 자리였고 코딩테스트를 통과해서 1차 면접을 진행했는데, 백엔드 위주로 구성된 포폴과 대답으로 기술 면접은 백엔드 위주로 들어왔다. 근데 질문에 대답을 못했던 부분이 많았어서 이번에 받은 질문들을 정리해보려고 한다. 1. 불변 객체가 무엇인가요?내가 아는 불변 객체는 final을 이용해서 값을 변경하지 못하도록 만드는 객체를 의미한다고 생각했다.그런데 이런 대답을 원하는 느낌이 아니었다... 불변 객체(Immutable Object)한번 객체를 생성하면 그 상태를 바꿀 수 없는 객체를 의미한다. 반대로는 가변(mutable) 객체가 존재한다.불변 객체는 read-only 메서드만 제공하며, 객체의 내부 상태를 제공하지 않거나 방어적 복..
· JAVA
자바를 사용하면서 List나 Map, Set을 많이 사용했는데 지금까지 아무 생각 없이 그냥 사용해 왔던 것 같다. 그래서 어떤 기능을 가지고, 어떤 특징을 가졌는지 정리해보고자 한다. Collections 프레임워크는 자료구조와 관련된 인터페이스, 클래스를 지칭하는 용어다. Collections에는 대표적으로 List, Set이 있다. (Map은 Collections에 포함되지 않음) List의 특징 1. 순서를 가진다. 2. 크기가 정해져 있지 않다.(동적) 3. 중복된 값을 넣을 수 있다. Set의 특징 1. 순서를 가지지 않는다. 2. 크기가 정해져있지 않다.(동적) 3. 중복된 값을 넣을 수 없다. 아래는 List에서 사용 가능한 인터페이스 메서드이다. ArrayList 제일 많이 사용하는 Li..
· 오류해결
기존에는 스프링부트 2.x를 사용해서 시큐리티 설정을 했었다. package com.parkchoi.scrum.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config...
· 오류해결
평소처럼 파이프라인을 작성해서 실행했는데 /var/jenkins_home/workspace/backend-pipeline@tmp/durable-f2782b40/script.sh: 6: Syntax error: Unterminated quoted string 위와 같은 에러가 발생했다. 파이프라인에서 많이 만나는 문법 에러라는데 pipeline { agent any stages { // 현재 작업 공간 내의 모든 것을 삭제 stage('Clean Workspace') { steps { deleteDir() } } // 깃허브 클론을 진행 stage('github Clone') { steps { git branch: 'backend', credentialsId: 'parkgihyeon_user_pass', ..
· 오류해결
스프링부트 3 버전을 사용하면서 이전 프로젝트를 실행시키는데 아래와 같은 에러가 발생했다. Required by: project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.2.0 Caused by: org.gradle.internal.component.NoMatchingGraphVariantsException: No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.2.0 was found. The consumer was configured to find a library for use during runtime, compatible with ..
indeep
'분류 전체보기' 카테고리의 글 목록 (12 Page)