Spring

    SOLID, 객체지향 설계 5원칙

    0. 글을 시작하며 객체지향 설계 5원칙 SOLID는 우리가 스프링을 공부하거나 기술면접을 준비할 때 아주 쉽게 접하게 되는 개념입니다. 보통 기술면접을 준비하면서 많이 접하게 되고 5가지 원칙을 거의 암기하는 방식으로 학습하게 되는 데 그렇다보니 금방 잊어버리고, 해당 원칙을 준수함으로서 가져오게 되는 효과 등 본질적인 내용은 정작 이해하지 못한다는 문제점이 있었습니다. 그래서 이번 글을 통해서 객체지향 언어를 사용하는 개발자라면 꼭 알아야할 객체지향 설계 5원칙을 구성하는 각 원칙의 개념정리와 함께 구체적 예시, 이해하기 어려운 부분들을 정리해보고자 합니다. 흔히 SOLID라고 불리는 이 용어의 정의는 다음과 같습니다. 좋은 객체지향 설계가 지켜야할 5가지 원칙 (SRP, OCP, LSP, ISP, ..

    Spring & MyBatis - DataAccessResourceFailureException

    기존에 진행하고 있던 프로젝트가 막바지 마무리 단계가 되었습니다. 해당 프로젝트는 백엔드는 Spring, MyBatis, MariaDB로 구성되어 이를 REST API 형태로 제공하고, React 기반으로 프론트엔드가 구축되어 있는 Server-Client 구조의 시스템이었습니다. 하지만 어느 날 저는 다음과 같은 연락을 받게 됩니다 (저를 라이언으로 칭했습니다). 테스터 : 라이언, 지금 웹이 제대로 동작하지 않네요. API가 호출이 제대로 안되는 것 같아요. 라이언 : 네? 지금 서버는 잘 돌아가고 있는데요. 다시한 번 확인해주실 수 있을까요? 테스터 : 어? 아 새로고침 하니까 잘 동작하네요? 라이언 : 아 그런가요? 일단 동작한다고 하시니 테스트 진행해주시고, 원인은 제가 확인해볼게요. 꽤 당황스..

    MyBatis - 2개 이상의 Query를 mapper에 한번에 작성하고 싶은 경우

    MyBatis를 적용한 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.)

    STS4와 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에서 오랜만에 Spring Legacy Project 선택 후 Spring MVC Project를 생성하려고 했는 데 다음과 같은 에러메시지가 나타나면서 Spring MVC Project가 생성되지 않았습니다. 가장 먼저 의심되는 부분은 jdk 버전문제였습니다. 이전에 제가 STS로 문제없이 프로젝트를 생성하고 진행할 때에는 jdk1.8을 사용했었는 데, 현재 PC에는 jdk 11.0.12가 설치되어 있는 상황이었습니다. 그래서 해볼 수 있는 가장 쉬운 해결책, 우선 STS의 업데이트를 확인하고 가능한 업데이트들을 진행하였지만 문제는 해결되지 않았습니다. 여러번 프로젝트 생성을 시도해보았지만 위의 두 가지 종류의 에러메시지가 반복적으로 나타나는 것 외에는 진전이 없었고, JDK도 완전히 삭제 후 여..

    JSP Model1, JSP Model2, Spring MVC pattern

    이번 시간에는 JSP Model1, JSP Model2, Spring MVC pattern에 대해서 알아보고 각각에 대해서 비교해보도록 하겠습니다. 해당 개념들은 Spring을 이해함에 있어서 대단히 중요한 개념이므로 이에 대해서 정확하게 이해하고 넘어가야할 필요성이 있습니다. 위에서 언급한 3가지 용어 JSP Model1, JSP Model2, Spring MVC pattern은 서로 모두 다른 용어인 것 같지만 서로 연관성을 가지고 있는 용어들입니다. 이에 대해서 한 번 알아보도록 하겠습니다. 우선 JSP Model에 대한 이야기를 하기에 앞서서 우선 Controller, Model, View라는 3가지 용어에 대해서 이해해야 합니다. 다음 3가지 용어는 JSP Model을 설명할 때 사용되는 용어로..

    Framework 개념 및 Spring 개요

    Spring에 대해서 알아보기 이전에 먼저 프레임워크의 개념에 대해서 먼저 알아야할 필요가 있습니다. 프레임워크(Framework) 특정한 목적에 맞게 프로그래밍을 쉽게 하기 위한 약속 프레임워크란, 특정한 목적에 맞게 프로그래밍을 쉽게하기 위한 규약, 약속을 말합니다. 간혹 식당에 가서 주문을 하실 때 이러한 상황을 겪어보신 적이 있을 겁니다. 종업원 : 주문 도와드리겠습니다. 나 : 로제파스타 하나랑 고르곤졸라피자 하나 주세요. 종업원 : 네 알겠습니다. (주방에) 13번 52번 하나! 일상 속에서 쉽게 지나칠 수 있는 너무나 자연스러운 상황이지만 이러한 상황을 통해서 우리는 프레임워크의 개념을 볼 수 있습니다. 위의 상황을 그림으로 아래와 같이 표현해 보겠습니다. 위의 예시에서 손님은 로제파스타, ..