Web Backend
SOLID, 객체지향 설계 5원칙
SOLID, 객체지향 설계 5원칙
2024.01.070. 글을 시작하며 객체지향 설계 5원칙 SOLID는 우리가 스프링을 공부하거나 기술면접을 준비할 때 아주 쉽게 접하게 되는 개념입니다. 보통 기술면접을 준비하면서 많이 접하게 되고 5가지 원칙을 거의 암기하는 방식으로 학습하게 되는 데 그렇다보니 금방 잊어버리고, 해당 원칙을 준수함으로서 가져오게 되는 효과 등 본질적인 내용은 정작 이해하지 못한다는 문제점이 있었습니다. 그래서 이번 글을 통해서 객체지향 언어를 사용하는 개발자라면 꼭 알아야할 객체지향 설계 5원칙을 구성하는 각 원칙의 개념정리와 함께 구체적 예시, 이해하기 어려운 부분들을 정리해보고자 합니다. 흔히 SOLID라고 불리는 이 용어의 정의는 다음과 같습니다. 좋은 객체지향 설계가 지켜야할 5가지 원칙 (SRP, OCP, LSP, ISP, ..
Spring & MyBatis - DataAccessResourceFailureException
Spring & MyBatis - DataAccessResourceFailureException
2022.08.11기존에 진행하고 있던 프로젝트가 막바지 마무리 단계가 되었습니다. 해당 프로젝트는 백엔드는 Spring, MyBatis, MariaDB로 구성되어 이를 REST API 형태로 제공하고, React 기반으로 프론트엔드가 구축되어 있는 Server-Client 구조의 시스템이었습니다. 하지만 어느 날 저는 다음과 같은 연락을 받게 됩니다 (저를 라이언으로 칭했습니다). 테스터 : 라이언, 지금 웹이 제대로 동작하지 않네요. API가 호출이 제대로 안되는 것 같아요. 라이언 : 네? 지금 서버는 잘 돌아가고 있는데요. 다시한 번 확인해주실 수 있을까요? 테스터 : 어? 아 새로고침 하니까 잘 동작하네요? 라이언 : 아 그런가요? 일단 동작한다고 하시니 테스트 진행해주시고, 원인은 제가 확인해볼게요. 꽤 당황스..
Collection Framework 이란?
Collection Framework 이란?
2022.03.26Collection Framework? 데이터들을 다루는 클래스들에 대한 설계를 표준화하여 모아둔 것 Java를 공부하다보면 "Collection Framework"라는 용어를 접하게 됩니다. 위의 정의처럼 Collection Framework는 "데이터들을 다루는 클래스들에 대한 설계를 표준화하여 모아둔 것" 입니다. 자료구조 강의시간에 배우는 C++의 STL과 비슷한 것이라고 생각하셔도 됩니다. 우리가 Stack, Queue, Linked-List와 같은 자료구조를 공부할 때에는 각 자료구조를 직접 구현해서 사용합니다. 자료구조를 학습하는 측면에서 이는 분명 좋은 공부입니다. 하지만 이 맥락을 우리가 실제로 개발하는 환경 또는 빠른 시간 안에 주어진 문제를 해결해야하는 코딩테스트와 같은 환경에 가져올..
MyBatis - 2개 이상의 Query를 mapper에 한번에 작성하고 싶은 경우
MyBatis - 2개 이상의 Query를 mapper에 한번에 작성하고 싶은 경우
2022.01.14MyBatis를 적용한 Spring Legacy Project에서 개발을 진행하다보면 분명히 하나의 mapper에 대해서 2개 이상의 Query를 호출하고 싶은 경우가 있습니다. 예를 들어서 한번의 mapper 호출로 2개 이상의 table에 record를 insert 하고 싶은 경우, 우리는 mybatis의 mapper 내에서 2개 이상의 Query를 사용할 수 있다면 이러한 문제를 쉽게 해결할 수 있습니다. 우리가 가장 먼저 떠올릴 수 있는 아이디어는 다음과 같습니다. INSERT INTO table1 (member1, member2, member3) VALUES (value1, value2, value3); INSERT INTO table2 (member1, member2, member3) VALU..
web.xml (A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type.)
web.xml (A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type.)
2022.01.12STS4와 Spring, Tomcat을 사용해서 프로젝트를 개발하다보면 web.xml 파일에 filter를 추가해서 한글이 깨지지 않도록 설정해주는 과정이 필요합니다. 그런데 가끔 web.xml에 해당 filter를 위한 코드를 추가하면 다음과 같은 error가 감지되는 경우가 있습니다. STS4에서 출력하고 있는 error 메시지는 다음과 같습니다. cvc-id.3: A field of identity constraint 'web-app-filter-name-uniqueness' matched element 'web-app', but this element does not have a simple type. 정확한 이유는 알 수 없지만 이 문제를 해결하는 방법은 간단합니다. 솔루션 web.xml 파일의..
STS - java.lang.ExceptionInInitializerError
STS - java.lang.ExceptionInInitializerError
2022.01.11STS에서 오랜만에 Spring Legacy Project 선택 후 Spring MVC Project를 생성하려고 했는 데 다음과 같은 에러메시지가 나타나면서 Spring MVC Project가 생성되지 않았습니다. 가장 먼저 의심되는 부분은 jdk 버전문제였습니다. 이전에 제가 STS로 문제없이 프로젝트를 생성하고 진행할 때에는 jdk1.8을 사용했었는 데, 현재 PC에는 jdk 11.0.12가 설치되어 있는 상황이었습니다. 그래서 해볼 수 있는 가장 쉬운 해결책, 우선 STS의 업데이트를 확인하고 가능한 업데이트들을 진행하였지만 문제는 해결되지 않았습니다. 여러번 프로젝트 생성을 시도해보았지만 위의 두 가지 종류의 에러메시지가 반복적으로 나타나는 것 외에는 진전이 없었고, JDK도 완전히 삭제 후 여..
콘솔 상에서 비밀번호 처리하기
콘솔 상에서 비밀번호 처리하기
2021.08.29이번 시간에는 java로 프로그램을 작성하면서 비밀번호를 입력받고 이를 처리하는 로직을 구성할 때 사용자가 입력하는 비밀번호가 보이지 않도록 처리하는 방법에 대해서 알아보도록 하겠습니다. 이러한 주제는 다음과 같은 질문에서 시작 됩니다. 다른 앱이나 웹 서비스처럼 Console 창에서도 사용자가 입력하는 비밀번호가 보이지 않도록 처리하는 방법이 없을까? 지금 우리가 구현하려는 것을 가리켜 "Password Masking" 이라고 표현합니다. 말 그대로 사용자가 입력하는 내용을 내부적으로는 유지하되, 외부적으로(console) 상에는 노출시키지 않음으로서 보안에 대한 안전성을 높이려고 하는 것 입니다. 그래서 가장 먼저 생각해볼 수 있는 내용은 다음과 같습니다. Scanner에 masking을 지원하는 옵..
gson 라이브러리를 사용한 파일 입출력 기능 구현하기
gson 라이브러리를 사용한 파일 입출력 기능 구현하기
2021.07.19프로젝트에 파일 입출력 기능을 추가하자! 이전에 살펴본 todo-list-console 프로젝트에서 가장 아쉬운 점은 정보가 메모리 상에서만 저장되기 때문에 프로그램이 종료되면 실행 간에 작업했던 내용을 모두 잃는다는 점 입니다. 그래서 이러한 문제점을 해결하기 위해서 파일 입출력을 사용하여 프로그램을 실행하는 중에 작업한 내용을 파일 형태로 저장하고, 프로그램을 재실행했을 때 이 파일을 읽어서 원래 작업 내용을 불러오는 기능을 구현해보겠습니다. 작업한 내용을 파일 형태로 저장한다고 하면 일반적으로 가장 쉽게 생각할 수 있는 방법이 txt 파일로 작업한 내용을 저장하는 것 입니다. 그것이 이전에 C언어 파일 입출력을 공부하면서 경험해본 방법이기도 하고, 파일 입출력에서 가장 기본적으로 다루는 것이 txt..
JVM의 메모리 구조
JVM의 메모리 구조
2021.07.03java로 작성된 프로그램이 실행되면 JVM은 OS로부터 memory 공간을 할당받고, 이 할당받은 공간을 용도에 따라서 여러 영역으로 나눠서 관리하게 된다. 여기서 주목해서 공부해봐야할 부분은 3가지 영역인데 그 세 가지 영역은 아래와 같다. 1. method area 2. heap 3. call stack or execution stack method area 프로그램 실행 중 사용되는 class에 대한 정보를 저장하는 위치 프로그램 실행 중 특정 class가 사용되면 JVM은 해당 class의 ".class" file을 분석하여 class에 대한 정보를 해당 영역에 저장한다. 그리고 이 때 해당 class의 class variable도 이 위치에 저장된다. heap 프로그램 실행 중 생성되는 ins..
Variable 과 Method
Variable 과 Method
2021.06.29변수(variable)는 다음 세 가지 종류가 존재함을 기억하도록 하자. 1. Class variable 2. Instance variable 3. Local variable 다른 프로그래밍 언어들과 마찬가지로 변수의 종류를 결정짓는 요소는 "변수가 선언되는 위치" 이다. 이 각각의 변수들을 구분하고자 할 때에는 다음의 기준을 적용해서 구분하면 된다. member variable을 제외한 나머지 변수들 모두 local variable 이며, member variable 중 static이 붙은 것은 class variable, 붙지 않은 것은 instance variable에 해당 아래의 예시 코드를 보면 위의 기준을 통해서 각 변수들을 어떻게 구분할 수 있는 지 이해할 수 있을 것이다. class Fis..
Class와 Object
Class와 Object
2021.06.29Class Object를 정의한 것 class는 위의 정의 그대로 "Object"를 정의한 것 이다. 실제로 Class는 Object의 정의를 바탕으로 Object를 생성하는 데 사용되며, Class를 통해서 생성된 각 객체들은 Class가 담고 있는 Object의 정의를 그대로 담게 된다. Object 실존하는 것, 사물 또는 개념 Object는 우리말로 "객체"라고 표현하며 실제로 존재하는 것을 가리켜 말한다. Object는 사물과 같이 실제로 그 형태가 존재하는 "유형의 객체"일 수 있고, 개념과 같이 형태가 존재하지는 않지만 실제로 존재하는 "무형의 객체"일 수도 있다. 프로그래밍에서 Object는 class에 정의된 내용대로 메모리에 생성된 것을 가리켜 말한다. Class와 Object의 관계?..
OOP(Object Oriented Programming language) 개념
OOP(Object Oriented Programming language) 개념
2021.06.29컴퓨터 공학을 공부한다면 어렵지 않게 들을 수 있는 이 OOP라는 용어는 우리말로 "객체지향언어"로서 java가 가지는 핵심적인 기능 중 하나이다. java의 모든 내용들을 잘 이해하기 위해서는 이 OOP에 대한 이해가 대단히 중요하기 때문에 OOP의 개념에 대해 공부해야할 가치는 충분하다. OOP는 다음과 같은 아이디어에서 시작 되었다. 우리가 있는 실세계를 모델링하여 이와 굉장히 유사한 가상세계를 컴퓨터 속에서 구현할 수 없을까? 그리고 이 과정에서 우리가 위치한 실세계를 다음과 같이 표현하였다. 우리가 위치한 실세계는 Object로 이뤄져 있으며, 세계에서 발생하는 모든 이벤트는 이 Object 간의 상호작용으로 발생한다. OOP가 가지는 장점은 다음과 같다. 1. 높은 코드 재사용성 2. 용이한 ..