백엔드 면접 질문 정리해보기 - 1
·
BackEnd
저의 생각을 정리한거라서 답이 아닐 수 있습니다.동기와 비동기의 차이점동기: 호출된 함수가 작업을 완료하기 전까지 호출 함수가 대기합니다. 작업이 순차적으로 진행됨을 의미합니다.비동기: 동기와 반대되는 개념으로 호출된 함수가 작업을 완료할 때 까지 기다리지 않고 작업을 다음 작업을 진행합니다. 작업이 순차적으로 진행되지 않고 비동기 호출이라면 동시에 일어나지 않음을 의미합니다. 결론: 동기는 함수가 실행을하고 작업을 완료하기 전 까지 호출 함수가 대기합니다. 하지만 비동기는 이와 반대되는 개념으로 호출 함수가 작업완료를 기다리지 않고 다음 작업을 진행합니다. 동기: 호출된 함수가 실행을 하고 작업을 완료하기 전까지 호출함수가 대기합니다블로킹: 동기와 유사한 개념이지만 블로킹은 호출한 함수의 실행 결과를 ..
FCM(Firebase Cloud Messaging)을 Spring boot에서 테스트 하기 좋은 코드로 만들어보기
·
BackEnd
일단 이 글을 작성하기 전에 알아야 할 부분이 있다.테스트 하기 좋은 코드는 뭘까?개인 사이드 프로젝트를 진행하면서 가장 어렵고도 고민이 많이 되는 부분이 바로 테스트에 대한 부분이다.테스트는 프로그램의 안정성을 확보해주는 동시에 메서드 하나하나의 동작을 예상가능하게 만들어야 된다고 생각했다.예를 들어서, 계산기의 plus 라는 메서드가 존재한다고 생각해보자.public int plus(int a, int b) { return a + b;}이런식의 메서드가 나올 것이다. 이것은 테스트 하기 아주 좋은 코드라고 생각된다. 이유는, 항상 동일한 입력에 대해서 동일한 출력을 반환한다. 1과 2가들어가면 항상 3이라는 결과가 100번 1000번 1만번을 해도 동일하다. 이러한 경우 메서드가 예측 가능하기 ..
[Spring] FCM + 스프링 부트로 푸시 알림 구현 고민하기
·
BackEnd
푸시알림(Push Notification)이란?푸시알림은 사용자의 스마트폰이나 컴퓨터에 실시간으로 전달되는 메시지나 알림을 말함푸시 알림의 특성1. 실시간성앱이나 웹사이트가 실행되고 있지 않아도 즉시 메시지가 전달됨서버에서 발생한 이벤트를 지연 없이 사용자에게 전달 가능2. 양방향 통신서버에서 사용자 기기로 직접 메시지를 '푸시(밀어넣기)'할 수 있음전통적인 폴링(polling) 방식과 달리 효율적인 리소스 사용이 가능함3. 다양한 용도커뮤니케이션: 새로운 메시지나 이메일 알림마케팅: 할인 정보나 프로모션 안내시스템: 앱 업데이트 알림안전: 날씨 경보나 긴급 상황 전파생산성: 일정 리마인더4. 맞춤형 설정사용자가 원하는 종류의 알림만 선택적으로 받을 수 있음알림 시간대, 빈도 등을 개인화할 수 있음푸시 ..
[Spring] Filter에서 Exception을 관리하는 법
·
BackEnd
Jwt 토큰을 통한 인증, 인가를 구현하던 중 발생한 문제점과 그에 대한 해결법을 정리했습니다.제가 구현한 Spring 서버는 다음과 같은 프로세스를 가집니다. 사용자가 로그인 합니다.로그인 성공시 token을 발급합니다.발급 받은 토큰으로 인가가 필요한 url에 접근 할 때, header에 Token을 담아서 옵니다.미들웨어인 Filter가 인가에 대한 로직을 처리후 성공한다면 비즈니스 로직을 거친후 반환합니다.구현했을 때, 성공적으로 반환하거나 혹은 제가 원하는 예외 처리가 되었을거라고 생각하고 실행한 결과전혀 다른 Response 타입이 나왔습니다. 저는 위와 같은 Response를 원했습니다. 하지만 위의 사진 처럼 예상하지 못한 Exception Response가 나오게 되었습니다. 이 상황은 ..
[Spring] @RestControllerAdvice를 통한 스프링에서의 예외처리
·
BackEnd
Exception 이란?기본적으로 예외처리를 하려면 Exception의 개념부터 알아야 합니다. Exception이란, 위의 사진과 같이 Object와 Throwable을 상속하는 서브 클래스입니다. Exception은 예외적인 상황을 처리하기 위해 자바에서 제공하는 클래스 입니다. Exception에서도 CheckedException과 UncheckedException 두가지로 나뉘게 됩니다. CheckedException은 체크된 예외라고 합니다. 체크된 예외는 프로그래머가 컴파일 시점에 반드시 처리해줘야하는 예외입니다.UncheckedException은 체크되지 않은 예외입니다. 체크되지 않은 예외는 프로그래머가 알지못하는 상황에 일어납니다. 즉, 어플리케이션이 실행 도중 발생하는 예외라고 볼 수 ..
[Java] DTO - Data Transfer Object, toEntity와 toDto
·
BackEnd/Java
학습 배경자바와 스프링 부트로 프로그래밍을 하면서 DTO를 사용을 해왔지만, 올바른 DTO의 정의를 알지 못했고 바람직한 사용이 아니라고 생각되었습니다. DTO를 제대로 알고 어떤 상황에서 사용해야 하는지 정리하기 위해 학습했습니다.DTODTO란 계층간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체 입니다.여기서 계층이란, Controller, Service, Repository 등을 의미합니다.DTO는 순수한 데이터를 저장하고, 데이터에 대한 getter, setter 만을 가져야 한다고 정의 되어 있습니다. DTO는 어떠한 비즈니스 로직을 가져서도 안됩니다.DTO를 왜 사용하나요?처음에는 User 객체를 굳이 UserDto에 담에서 보내는 이유가 뭘까? 라고 생각을 했습니다.User 그대로 보내..
우테코 프리코스 1주차 미션 회고 및 정리 - 1
·
BackEnd/Java
우아한 테크 코스 1주차 미션인 문자열 덧셈 계산기를 구현하는 과정과 이를 통해 어떤 점에서 어려움을 겪었고 어떤 점을 개선했는지 정리하겠습니다.문자열 덧셈 계산기기능 요구 사항입력한 문자열에서 숫자를 추출하여 더하는 계산기를 구현한다.쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환한다.예: "" => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => 6앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다.예를 들어 "//;\n1;2;3"과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결..
[Java] 스트림이란? 스트림의 사용이유와 컬렉션과 비교 예제
·
BackEnd/Java
스트림이란? 스트림의 사용이유Stream자바 8 에서 추가된 Stream은 데이터 처리기능을 가지고 있으며, 데이터 처리 효율을 높여줍니다.Stream의 사전적 의미는 ‘시냇물’이라는 의미를 가지며, 연속적인 사물이나 사람의 흐름 이라고 정의합니다.Stream은 시간상에 나타나는 일련의 데이터 요소라고 정의함. 이는 데이터 집합의 의미보다는 연속적인 데이터의 흐름이라고 말하기 더 적합합니다.결론적으로 Stream을 이용하면 일련의 데이터 처리 연산을 함수형 연산을 통해 표준화된 방법으로 쉽게 가공하고 처리할 수 있습니다.Stream의 사용 이전에는 Collection으로 사용했었고 이는 코딩작업이 길어지며 가독성이 불편하여 작업할 때의 애로사항이 많았습니다.하지만 Stream은 기존의 Collection..