전체 글 94

기술면접 준비 (2)

JVM의 스택과 힙메모리 영역에 대해 아는 만큼 설명해주실 수 있을까요? JVM에서의 스택메모리는 java의 메서드가 실행될 때 지역변수나 참조값을 가지는 변수 그리고 매개변수 등을 저장하게 됩니다. 메서드가끝나게 되면 스택메모리공간에서 할당되었던 값들이 사라지게 됩니다. 그리고 힙메모리는에 할당되는 것들은 인스턴스 및 인스턴스내부에있는 변수값등을 가지게 됩니다. 인스턴스 객체의 주소값을 가지는 변수는 스택메모리공간에 할당되게 되고 인스턴스를 가르키는 변수가 없을 때는 GC(가비지 컬렉터)가 수거하게 됩니다. 스택과 힙메모리 영역의 차이점으로는 스택은 생명주기가 힙에 비해서 짧고 힙메모리는 해당 인스턴스들을 가르키지 않을때까지 있기 때문에 상대적으로 더 길다고 할 수 있습니다. 그에따라 메모리 공간도 스..

기술면접 2024.01.19

기술면접 준비 (1)

1. 동기와 비동기의 차이를 설명 해 주세요. - 동기는 요청을 함으로써 결과값이 동시에 이루어지는것을 동기라고 합니다. - 비동기는 요청을 함과 동시에 결과값이 이루어지지 않습니다. 작업처리의 단위가 동시에 일어나느냐 아니냐의 차이라고 볼 수 있습니다. 2. 프레임워크와 라이브러리의 차이를 설명 해 주세요. 프레임워크는 하나의 큰 틀이라고 할 수 있습니다. 라이브러리는 프레임워크 안에서 코드를 짤 때 필요한 기능들이 미리 만들어져있는것이 라이브러리라고하는데 이것을 이용하여 기능을 더욱 더 간편하게 구현할 수 있습니다. 3. Call by reference란 무엇이고 보통 어떻게 쓰이나요? 참조형식이고 깊은복사라고도 한다. 실제 주소값을 통해서 접근하기때문에 수정할 시 원본 값이 바뀐다 4. Overri..

기술면접 2024.01.18

TCP/IP 계층

컴퓨터와 컴퓨터가 통신할 때 이때 발생하는 네트워크의 일련과정을 기능별로 나눈것을 OSI 7계층이라고한다. 이렇게 계층을 나누게 되면 통신이 이루어지지 않았을 시 정확히 어떤계층에 문제가 발생했는지 파악하고 해당 계층에만 조치를 취해 문제를 해결할 수 있기 때문 1.물리 계층 비트단위로 통신이되며 물리적인 통신으로 통신이 됩니다. 장비로는 허브 리피터가 있습니다. 소프트웨어적이아닌 하드웨어적으로 통신을 합니다. 2.데이터 링크 계층 물리계층에서 받았던 비트데이터들을 프레임단위로 변환하여 통신하고 받았던 데이터의 신뢰성 등 데이터가 잘 들어왔는지 체크 후 다음계층으로 보내게됩니다. 장비로는 스위치,브릿지 등이 있습니다. 3.네트워크 계층 네트워크계층부터는 패킷으로 통신이 되고 각 노드들에 노선을 찾는 과정..

CS/네트워크 2023.09.28

서비스로직에서 발생될 수 있는 예외처리

저번에는 DTO에대한 유효성검증처리 및 URI의 변수 유효성검증처리를 RestControllerAdvice 에 적용을 해보았다 이번에는 Service로직에서 발생될 수 있는 RuntimeException 및 사용자 정의 예외를 사용해보자. 서비스로직에서 발생할 수있는 예외처리를 예로 들면 - 시스템 내부에서 조회하려는 리소스(자원,Resource)가 없는 경우 - 백엔드 서버 쪽에서 예외를 의도적으로 던져서 클라이언트 쪽에 에러가 발생한 정보를 알려줘야할 경우 가 있다. 이 부분에 대해서는 RuntimeException 객체에 적적한 예외메세지를 포함한 후에 메서드 밖으로 throw 해주면 된다. throw해준 뒤 공통으로 예외처리를 하는 globalExceptionAdvice클래스에서 받은 Runtim..

dx, dy 테크닉

dx, dy 테크닉을 사용하는 이유 특정 방향에 대해 이동하는 경우 비슷해보이는 코드가 반복되면 dx, dy 테크닉을 많이 사용하게 된다. 예를 들어 E,W,S,N 순으로 동,서,남,북이라 했을 때 x , y 의 좌표는 이렇게 나타 낼 수 있다. 동쪽 : x = +1 , y = 0 서쪽 : x = -1 , y = 0 남쪽 : x = 0 , y = -1 북쪽 : x = 0 , y = +1 이부분을 배열에 저장하여 쓰게되면 코드가 간결해지고 명확해지기 때문에 효율적으로 방향을 이동할 수 있다. int[] dx = new int[] {1, -1, 0, 0} int[] dy = new int[] {0, 0, -1, 1} 이런식으로 저장하게 되면 dx[0] dy[0] = 동쪽 dx[1] dy[1] = 서쪽 dx[..

CS/알고리즘 2023.08.31

@RestControllerAdvice를 사용한 예외 처리 공통화

예외 처리 공통화를 하는 이유 @ExceptionHandler만 사용하여 Controller에 작성할 경우 여러 예외로 인해 각 Controller마다 추가해야할 예외처리가 너무많아지며, 중복도 발생하기 때문에 예외처리 공통화를 통해 더 효율적으로 관리 할 수 있다. @RestControllerAdvice 예외를 처리할 ExceptionAdvice 클래스에 @RestControllerAdvice 애너테이션을 추가하면 이 클래스는 이제 Controller 클래스에서 발생하는 예외를 도맡아서 처리하게 됩니다. 지금까지 Controller 클래스에서 발생하는 RequestBody의 유효성 검증에 대한 에러를 처리하였는데 URI 변수로 넘어오는 값의 유효성 검증에 대한 에러 처리는 어떻게 할 수 있을까 Cons..

카테고리 없음 2023.08.30

@ExceptionHandler를 이용한 예외 처리

예외 처리를 하는 이유 클라이언트와 서버간 통신을 하다보면 요청값이 틀리거나 잘못된 정보를 요청할시 에러가 뜨게되는데 그 에러를 예외처리 해줌으로써 더욱 더 명확히 에러가 왜 발생되었는지를 클라이언트에게 알려줄 수 있다. @ExceptionHandler를 사용해 Controller에 메서드를 만들게 되면 유효성 검증과정에서 내부적으로 던져진 MethodArgumentNotValidException을 @ExceptionHandler를 사용한 메서드를 통해 들어오게 됩니다. MethodArgumentNotValidException 객체에서 getBindingResult().getFieldErrors()통해 발생한 에러정보를 확인할 수 있습니다. 그렇기 때문에 필요한 정보만 넘겨주기 위해서 Error Resp..

MapStruct를 이용하여 Mapper 자동 생성

개발자가 일일이 수작업으로 매퍼 클래스를 만드는 것은 비효율적이기 때문에 MapStruct가 매퍼 클래스를 자동으로 구현해 줌으로써 개발자의 생산성을 향상 해줄 수 있다고 한다. MapStruct란? 매퍼 클래스를 자동으로 구현해 줌으로써 개발자의 생산성을 향상해줄 수 있다. MapStruct 의존 라이브러리 추가 dependencies { implementation 'org.mapstruct:mapstruct:1.5.3.Final' // mapstruct annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final' // mapstruct } MapStruct를 사용하려면 Mapper를 인터페이스로 정의하여야하고 @Mapper(component..

DI를 적용한 비즈니스 계층과 API 계층 연동

Spring DI를 사용하면 클래스간의 결합을 느슨한 결합으로 손쉽게 만들어 줄 수 있다. DI를 적용하기 위한 조건 주입을 받는 클래스와 주입 대상 클래스가 모두 Spring Bean이어야 함. DI 적용 방법 스프링 빈으로 등록된 객체를 생성자를 통해 주입 private final UserService userService; public UserController(UserService userService) { this.userService = userService; } 누가 UserService를 주입 하는가? Spring프레임워크에서 애플리케이션 로드 시, ApplicationContext에 있는 Been객체를 찾아 주입 API계층에서의 Controller는 @RestController을 통해 S..

API계층 ←→ 서비스 계층

서비스계층은 Controller에서 전달 받은 요청을 실제로 처리하는 비즈니스 로직을 수행 후 결과 값을 다시 API계층으로 리턴해주는 역할을 합니다. public class UserService { //회원가입 public User createUser(User user){ return null; } //회원수정 public User updateUser(User user){ return null; } //회원찾기 public User findUser(long userId){ return null; } //회원전체출력 public List findUsers(){ return null; } //회원삭제 public void deleteUser(long userId){ } 컨트롤러 클래스의 핸들러메서드와 서비..

들어오는 데이터(DTO)에서 유효성 검증

@RequestBody를 통해 JSON데이터가 자바객체로 변환하면서 들어온 데이터 DTO에서 값들에 대한 유효성을 처리해보자. 유효성 검증을 위한 의존 라이브러리 추가 Spring Boot에서 지원하는 Starter가 필요하다. build.gradle파일의 dependencies 항목에 implementation 'org.springframework.boot:spring-boot-starter-validation'// validation 을 추가한다. 주로 사용하는 유효성 애너테이션 @Email - 유효한 이메일 주소인지를 검증 - 유효한 검증에 실패하면 내장된 디폴트 에러 메세지가 콘솔에 출력 @NotBlank - 정보가 비어있지 않은지 검증 - null 값이나 공백(""), 스페이스(" ") 같은 값..

개발/Spring 2023.08.14

JSON으로 들어오는 HTTP 요청 객체로 한번에 받기

컨트롤러의 핸들러메서드에서 JSON으로 HTTP요청을 받을 때 DTO객체를 생성하여 한번에 요청 데이터를 받아보자 방법은 간단하다 핸들러메서드의 매개변수를 받는 공간에 스프링 프레임워크에서 지원하는 @RequestBody 애너테이션을 추가하여 받을 수 있다. 스프링 프레임워크에서 지원하는 @RequestBody 애너테이션은 JSON 형식의 RequestBody를 Dto클래스의 객체로 변환을 시켜주는 역할을 한다. JSON 형식이 아닌 다른 형식의 데이터를 전송한다면, Spring 내부에서 "Unsupported Media Type" 같은 에러메세지를 전달한다. 그럼 dto객체로 변환하여 비지니스로직을 거쳐 반환하려는 데이터를 다시 JSON으로 내보내야할 때는 어떻게 처리할 수 있을까? 이것도 스프링 프레..

개발/Spring 2023.08.14

MVC패턴 계층 기반 패키지 구조

Spring Boot 팀에서는 테스트와 리팩토링이 용이하고, 향후에 마이크로 서비스 시스템으로서의 분리가 상대적으로 용이한 기능 기반 패키지구조 사용을 권장을 하고있다. 위 사진은 팀프로젝트인 gigker 프로젝트 때 패키지 목록이다. 빨간줄로 표시된 부분을 보면 DB 설계 후 나온 각각의 테이블을 기준으로 패키지를 각각 만든다.

SQLD 49회차 합격!!

와아ㅏㅏ 한번만에 합격했다...ㅠㅠ 그래도 노력이 헛되지 않아서 기분이 굉장히 좋다. 비전공자에 노베이스 순수 공부시간 1주일 조금 넘는 시간을 준비해서 합격을 했다. 실수한게 많아서 조마조마 했지만 합격이라 정말 다행인 것 같다. SQLD기출문제 일명 노랭이책을 사서 1회독 후 기출문제를 회차별로 총 5번 풀었다. 나도 할 수 있다. 이렇게 하나하나씩 쌓아 나가자.

자격증/SQLD 2023.06.30