전체 글 126

인증 방식이란? - API Key, OAuth, JWT

서비스가 다양해지고 규모가 커지면서 기능들을 분리하기 시작했고, 이를 위해 모듈이나 애플리케이션들 간의 공유와 독립성을 보장하기 위한 사용자 인증 기능들이 나타나기 시작했다. 이러한 기능들 중 제일 먼저 등장하고 보편적으로 사용되는 기술은 API Key이다. API Key 동작 방식 사용자는 API Key를 발급받는다. 해당 API를 사용하기 위해 Key와 함께 정보를 요청한다. 애플리케이션은 요청이 들어오면 Key를 통해 사용자의 정보를 확인하여 권한을 확인 후 정보를 반환한다. 문제점 API Key를 사용자에게 직접 발급하고 해당 Key를 통해 통신을 하기 때문에 통신 구간의 암호화가 잘 되어 있더라도 Key가 유출된 경우를 대비하기 힘들다. 때문에 Key를 주기적으로 업데이트해야 하기에 번거롭다. ..

Web 2024.03.20

Cookie와 Session, 왜 사용하지?

Cookie는 클라이언트 측에서 정보를 저장하고 전송하며, Session은 서버 측에서 정보를 유지하고 관리한다. Cookie와 Session은 왜 사용할까? HTTP 프로토콜은 connectionless하고, stateless한 특징을 가지고 있다. HTTP 프로토콜은 클라이언트가 요청한 후 응답을 받으면 그 연결을 끊어 버리는 특성을 가진다. 또, 통신이 끝나면 상태를 유지하지 않는 특성을 가진다. 때문에 서버는 클라이언트가 누군지 확인하는 과정이 필요하다. Cookie와 Session을 사용하여 클라이언트를 확인한다. 저장 위치, 만료 시점, 용량 제한, 보안, 속도, 예시 Cookie란? 저장 위치 Cookie는 클라이언트의 상태 정보를 로컬(웹 브라우저)에 저장한다. 만료 시점(라이프 사이클) ..

Web 2024.03.20

MySQL 연동 (기존 H2 DB 사용)

MySQL으로 DB 교체하기 build.gradle에 MySQL에 대한 의존성 추가 implementation 'mysql:mysql-connector-java:8.0.32' application.yml 설정 파일 수정 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/{DB이름}?useSSL=false&serverTimeZone=Asia/Seoul&characterEncoding=utf-8 username: {사용자} password: {비밀번호} 비밀번호는 대문자, 소문자, 숫자, 특수문자가 포함된 8자 이상으로 설정해야 한다. 비밀번호 재설정 없이 스프링 서버를 실행했다가 오류를 마주했다. ..

Back-end/Spring 2024.03.08

[Java] 인터페이스(Interface)

인터페이스(Interface) 인터페이스는 사용자 간 또는 컴퓨터 간 '통신'이 가능하도록 연결해주는 디바이스나 프로그램을 의미합니다. 사용자 간, 컴퓨터 간 통신을 위해서는 '규격'이 중요합니다. 여기서 '규격'은 인터페이스라 할 수 있고, 인터페이스는 하나의 '표준화'를 제공하는 것이라 할 수 있습니다. 인터페이스라는 개념은 추상 클래스와 매우 유사합니다. 쉽게 말해 인터페이스는 추상 클래스보다 추상화 정도가 더 높은 개념이라고 생각하면 됩니다. 또, 하나의 차이점은 인터페이스는 일반 메소드나 멤버 필드를 가질 수 없습니다. 어떤 클래스가 인터페이스를 사용한다면(상속받는다면) 인터페이스에 선언되어 있는 메소드 구현해야 한다. 인터페이스를 선언할 때, class 키워드가 아닌 'interface 키워드..

JAVA 2024.02.13

MVC 패턴, MVC 패턴의 한계

목차 MVC 패턴 등장 배경 M, V, C의 역할 기본적인 동작 MVC 패턴의 한계 MVC 패턴 등장 배경 서블릿과 JSP만으로 개발을 진행하면 비즈니스 로직과 뷰 화면 렌더링이 모두 하나의 코드에서 처리된다. 결과적으로 코드의 유지 보수가 어려워진다. 때문에 서블릿의 장점과 JSP의 장점을 살려 MVC 패턴이 등장했다. 서블릿은 컨트롤러 역할을 담당하고, JSP는 뷰 역할을 담당한다. MVC 패턴을 사용함으로써 비즈니스 로직을 수정하는 일과 뷰 화면을 수정하는 일은 각각 다르게 발생하고, 서로에게 영향을 주지 않는다. Model, View, Controller 역할 Model 뷰에 전달할 데이터를 담아둔다. View JSP 역할, 모델에 담겨있는 데이터를 사용해서 화면을 그리는 역할을 한다. (HTML..

JAVA 2024.02.08

JSP와 서블릿(Servlet) 그리고 MVC 패턴

JSP(.jsp)란 무엇인가? JSP는 Java Server Pages의 약자이며, HTML 코드에 Java 코드를 입력하여 동적 웹 페이지를 생성하는 도구이다. JSP 실행 시, 자바 서블릿(Servlet)으로 변환되고 웹 애플리케이션 서버(WAS)에서 동작하면서 필요한 기능을 수행하고 응답 정보를 웹 페이지와 함께 클라이언트로 응답한다. 웹 애플리케이션 서버(WAS, Web Application Server) 웹 애플리케이션 서버는 HTTP 기반으로 동작하고, 웹 서버의 기능을 포함한다. 웹 서버도 HTTP 기반으로 동작하지만, 정적 리소스만을 제공한다. 웹 애플리케이션 서버는 동적 리소스를 제공하기 때문에 클라이언트에 따라 다르게 웹 페이지를 보여줄 수 있다. 대표적인 웹 애플리케이션 서버에는 톰캣..

JAVA 2024.02.06

[코딩테스트 연습] 주차 요금 계산 - Lv.2

주차 요금 계산 - Lv.2 https://school.programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr HashMap, TreeMap(정렬을 위해)를 사용하여 각 차량의 입차 시간과 총 주차 시간을 저장했다. 이 문제는 여러 가지 조건들을 통해 구현 능력을 확인하고, 자료구조를 적절히 활용하는 것에 초점은 둔 것 같다. 차량의 입차 시간을 저장하는 inTime Map과 차량의 총 주차 시간을 저장하는 parking Map을 선언했다. 차량 번호가 아닌 입/출차를 의미하는..

프로그래머스 2024.02.01

스레드 풀(Thread Pool)과 Executor

목차 스레드 풀이란? 스레드 풀을 왜 사용해야 하는가? 자바는 스레드 풀을 어떻게 구현하는가? Executor 인터페이스를 왜 사용하는가? Executor 인터페이스에 대하여 Executor 동작 주기 스레드 풀은 동일하고 독립적인 다수의 작업을 실행할 때 가장 효과적이다. 스레드 풀이란? 스레드 풀은 스레드를 생성하여 관리하는 곳이다. 생성된 스레드에 작업을 할당해 동시에 실행되는 작업을 관리한다. 스레드는 할당된 작업이 끝나면 스레드 풀로 돌아와 대기 상태가 되며, 다음 작업 할당을 위해 준비한다. 스레드 풀의 스레드에 할당되는 작업의 종류 혹은 처리 시간이 비슷할수록 해당 스레드 풀의 작업 처리 속도가 빨라진다. 또한, 크기가 제한된 스레드 풀에 다른 작업과 의존성을 가지는 작업이 할당될 경우 데드..

JAVA 2024.01.31

스레드(Thread)

목차 스레드란? 스레드 고안 스레드 이점 스레드 사용의 위험성 스레드는 멀티프로세서 시스템의 능력을 최대한 끌어낼 수 있는 가장 쉬운 방법이다. 프로세서 개수가 늘어날수록 여러 작업을 동시에 실행하는 일이 더욱 중요하다. 스레드란(Thread)? 스레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미하며, 스레드 사용으로 인해 하나의 프로그램 안에 여러 개의 프로그램 제어 흐름이 공존할 수 있다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 프로세스(Process)란? → 프로세스란 운영체제에 의해 메모리에 적재되어 실행 중인 프로그램이다. 프로세스는 독립적인 메모리 영역을 사용한다. 스레드 고안 스레드는 프로세스의 문제점을 해결하고자 고안됐다. 프로세스의 생성 및 소멸에 따..

JAVA 2024.01.27

서버 성능 최적화

성능 향상을 왜 해야할까? 애플리케이션 로딩 속도가 느리면 사용자의 이탈률이 높다는 조사 결과가 있다. 구글의 설문 자료에 따르면 3초 안에 페이지 로딩이 되지 않으면 53%의 사용자가 떠나고 길어질수록 이탈률이 늘어난다. 성능 향상을 위한 방법은 무엇이 있을까? 캐시(Cache) 사용 캐시란 나중에 요청할 결과를 미리 저장해둔 후 빠르게 서비스 해주는 것을 의미한다. 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참조하지 않고 캐시에 접근하여 요청을 처리하게 된다. 애플리케이션의 성능을 최적화하기 위해 캐시를 사용하는 방법을 익히면 전체적인 시스템 성능 향상에 큰 도움이 된다. 대표적인 캐시 도구로는 Redis, Memcached 등이 있다. 캐시 사용 구조 Look A..

Back-end 2023.10.17