본문 바로가기

전체 글

(27)
[데이터베이스] 제약조건 NOT NULL과 DEFAULT 두 개를 같이 써야 할까? 🤔 의문나는 대부분 프로젝트를 진행하면 각 DB Column 들의 제약 조건에 웬만하면 NOT NULL을 붙인다. 그러다가 DEFAULT 제약 조건을 적용할 일이 생겨서 DEFAULT를 붙이고 보니 NOT NULL과 DEFAULT가 공존했는데, 대충 봤을 때는 DEFAULT가 있는데 NOT NULL이 동작할 일이 없지 않나? 하는 의문이 들었다. NULL은 상당히 민감한 문제이기에 NOT NULL을 제거할까 하다가 조금 더 알아보니 NOT NULL도 필요하다는 것을 알 수 있었다.NOT NULLNOT NULL 이란 이름 그대로 NULL 값이 들어오면 오류를 발생시킨다.NULL 값이 들어오는 상황에는 무엇이 있을까?사용자가 해당 속성의 값을 입력하지 않은 경우. ( 이는 DEFAULT 제약이 있다면 해결..
[금융/백엔드(Spring)] 은행을 만들어보자! - Joon Bank 요구사항 정의 및 설계는 다음 노션에 정리되어 있다.-> Joon Bank Notion  개발이 진행됨에 따라 글은 실시간으로 업데이트될 예정이다.💁‍♂️ 소개은행의 기능을 구현해 볼 생각이다.기능은 다음과 같은 핵심 기능만을 구현할 예정이다. ( 핵심 기능 구현 이후 서비스 기능들 추가 예정 )입금/출금송금거래 내역 관리계좌 관리 ( 계좌 등록, 삭제, 추가 )관리자 페이지 ( 전체 입출금 및 송금 내역 조회 )기능은 적되 보안성, 가용성, 확장성 측면을 중심으로 구현할 계획이다.모놀리식으로 개발을 하되, 향후 MSA로 전환 가능성을 열어두고 그에 맞춰 개발을 할 계획이다.기술 고민Session vs JWT서버의 부담은 있더라도 보안성 측면에서 좀 더 안정적인 Session을 사용하기로 했다.가장 큰..
MySQL 사용자 관리(생성, 권한, 조회, 삭제) 명령어 정리 매번 헷갈리고 검색하기 귀찮아서 정리함💁‍♂️ MySQL 사용자 관리사용자 생성사용자 권한 부여사용자 권한 삭제사용자 권한 조회사용자 조회사용자 삭제📌 사용자 생성CREATE USER '사용자명'@'접근위치' IDENTIFIED BY '비밀번호'; 접근위치의 종류localhost % ip ex) CREATE USER 'joon'@'localhost' IDENTIFIED BY 'qwer1234@'; + 여러 ip에 대한 접근 허용은 '/'를 이용한 ip 나열 ex) 1.1.1.1/2.2.2.2또는 wildcard % 기호로 여러 대역폭 허용 가능 ex) 192.168.0.% or 192.168.% 와 같이 사용(CIDR 방식은 지원하지 않음)📌 사용자 권한 부여GRANT 권한 ON 데이터베이스.테이블..
[Spring] Spring Interceptor란 무엇인가? 스프링 인터셉터(Spring Interceptor)란?Controller의 Handler 호출 전/후/실행 후로 요청과 응답을 낚아채서 처리를 하는 인스턴스다.보통 인터셉터가 필요한 경우는 특정 핸들러가 실행되기 전에 처리해야 될 로직(예를 들면 로그인 체크) 또는 컨트롤러 실행 이후 예외 처리와 같은 작업을 할 때 사용한다. 이와 비슷하게 공통 로직을 처리하는 친구들로 AOP와 Servlet 필터가 있다스프링 인터셉터 동작 과정MVC 동작 과정 중 preHandle, postHandle, afterCompletion 이 세 가지가 인터셉터가 동작할 수 있는 위치이다.각각 Dispatcher Servlet과 컨트롤러 사이에서 컨트롤러 호출 전/후로 그리고 뷰 리졸버를 통한 뷰 렌더링 이후에 동작한다.* ..
[Spring] Dependency Injection의 세 가지 방법 지금까지 나는 DI를 필드 주입을 통해서만 진행해왔다. (가장 간단하였기 때문이다..)근데 DI에 대해 공부를 좀 하다 보니 필드 주입은 지양해야 되는 방법이라는 것을 알게 되었다.!그러면 지금부터 왜 필드 주입은 지양해야 되는지, 그리고 나머지 의존성 주입 방법들은 무엇이 있는지 한번 알아보자.결론부터 말하자면 생성자 주입을 사용하는 것이 정배이다.의존성 주입의 세 가지 방법필드 주입 ( 비추천 )수정자 주입생성자 주입 ( 추천 )왜 필드 주입은 별로인가?필드 주입이란 그냥 @Autowired 애노테이션을 이용해서 스프링 IoC 컨테이너로부터 의존성이 주입되는 방식이다.이거는 그냥 쓰지 말자. Spring 공식 문서에도 언급되지 않는 방법이다.public class Controller { @Autowi..
Docker란 무엇인가? Docker란 무엇인가?간단하게 개발환경 일치를 위한 도구라고 생각하자. 좀 더 자세히는 리눅스 컨테이너 기술을 활용한 오픈소스 가상화 플랫폼이라고 생각하면 된다.여기서 리눅스 컨테이너란 운영체제 위에 논리적인 영역을 구축하고 그 영역에 애플리케이션 실행에 필요한 프로그램들을 담아둔 공간이라고 생각하면 된다.Docker를 찾게되는 배경개발과정에서 발생하는 불편한 점을 생각해보자. 하나의 서비스를 개발할 때 그 서비스와 관련된 의존성들이 매우 많을 것이다.간단하게 예를 들어보자면 하나의 웹 애플리케이션을 개발해도 java, nodejs, DBMS 등 여러가지의 프로그램이 애플리케이션 동작을 위해 필요하다. 그리고 나중에 나의 로컬환경에서의 개발이 끝나고 실제 서버에 배포를 해야하는 상황이 발생했다.애플리케..
Spring과 Spring Boot에 대한 소개 Spring 이란?Spring은 자바 언어를 이용하여 애플리케이션 개발을 편하게 만들어주는 프레임워크(도구)이다.프레임워크, 즉 스프링은 개발을 위한 프레임을 제공하고 우리는 스프링이 제공해 주는 프레임 위에서 편리하게 애플리케이션 개발을 진행하면 되는 것이다. 스프링이 없다면 우리는 서블릿부터 데이터베이스 연결 등 애플리케이션에 필요한 모든 코드를 우리가 직접 짜야 하고 매우 복잡하고 어려워질 것이다.  하지만 우리는 스프링이 있기 때문에 다른 코드에 쏟을 집중을 온전히 서비스의 비즈니스 로직 구현에만 집중할 수 있다.(이게 바로 스프링의 목적이다)이렇게 우리가 로직에만 집중할 수 있게 도와주는 스프링의 핵심 원리들이 이제 스프링 하면 많이 언급되는 DI, IoC, AOP 같은 개념들이다. 근데 이제 ..
Visual Studio Code(vscode) 한글 깨짐 문제 원인과 해결 방법 비주얼 스튜디오 한글 깨짐 발생비주얼 스튜디오 코드 처음 쓰는 사람들은 아마 다음과 같이 실행 화면에서 한글이 깨지는 현상을 겪을 것이다. 한글 깨짐 원인윈도우 사용자들한테 발생하는 문제이다. 기본적으로 인코딩 불일치 문제로 발생하는 오류인데 윈도우는 한글 인코딩을 CP949를 기본값으로 지원하고 있고 비주얼 스튜디오 코드는 기본 인코딩이 UTF-8이다. 그렇기에 우리는 현재 UTF-8로 설정되어있는 vscode 소스 파일에 CP949로 작성을 하였기 때문에 컴파일하고 실행을 해보면 한글이 깨져있는 것이다. 이를 해결하기 위한 방법을 지금부터 알아보자. 한글 깨짐 해결 방법해결 방법이 두 가지 존재한다.소스 파일 인코딩을 UTF-8 에서 EUC-KR(CP949)로 설정윈도우의 한글 인코딩 방식을 UTF-..