본문 바로가기

전체 글

오픈소소는 공짜가 아니다. 1. 개요 2021년에 11년간 이루어졌던, 구글과 오라클의 소송이 끝났습니다. 쟁점은 오픈소스인 자바의 API에도 저작권이 인정되는가, 저작권이 인정 될 경우 구글의 API 재사용 행위가 공정이용에 해당 되는가입니다. 결국 구글행위가 공정이용에 해당되어 승소하기는 했지만, API 코드에 대한 저작권에 대한 대법원 판결은 이루어지지 않았습니다. https://zdnet.co.kr/view/?no=20210406064737 구글, '10년 자바전쟁' 오라클에 최종 승리 10년 동안 계속된 세기의 자바 저작권 소송에서 구글이 다시 승부를 뒤집으면서 최증 승리했다. 미국 연방대법원은 5일(현지시간) 자바 저작권 소송에서 6대2로 구글... zdnet.co.kr 그만큼 저작권이라는 것은 매우 중요한데요, 오픈소.. 더보기
헥사고날 아키텍처 헥사고날 아키텍처란? 헥사고날 아키텍처는 응용 프로그램의 비즈니스 로직을 외부 세계로 부터 격리시켜 객체지향원칙을 잘 지키게 하는 아키텍처입니다. 대중적으로 많이 사용하는 3계층 아키텍처에 비해 더욱 유연하고 테스트하기 쉬워진다는 장점이 있습니다. 이 헥사고날 아키텍처를 만들기 위해 핵심 로직은 중앙 도메인 영역에 위치하며, 입력과 출력을 처리하는 포트와 어댑터를 통해 외부와 소통합니다. 이러한 특징으로 포트 및 어댑터 아키텍처라고도 불립니다. 이 헥사고날 아키텍처의 핵심은 내부 영역과 외부 영역을 분리 하는 것 입니다. 내부 영역 💡 Domain Model Layer 및 Application Layer 위 그림에서 회색 부분이 내부 영역입니다. Domain Model Layer는 DomainModel이.. 더보기
클라우드 네이티브란? 1. 개요 이전의 많은 IT 회사들은 자신의 회사 내부에 서버 장비 및 소프트웨어를 설치하여 서비스를 제공해 왔습니다. 이를 온프레미스방식이라 합니다. 이와 대조적으로, 클라우드 네이티브는 AWS와 같은 클라우드 서비스 제공 업체가 제공하는 서버에 서비스를 설치하여 서비스를 제공하는 방법입니다. 즉, 두 개의 가장 큰 차이점은 회사 내 하드웨어 서버의 존재 유무입니다. 온프레미스 방식은 회사에 하드웨어 서버가 있는 것이고, 클라우드 네이티브 방식은 회사 내에 하드웨어 서버가 없습니다. 2. 클라우드 네이티브 클라우드 환경에서 소프트웨어(서비스)를 개발, 배포, 운영, 확장하는 방식. 네이티브(Native)란, 어떤 지역이나 특정 환경에서 자연적으로 존재하는 것을 의미합니다. 여기서 클라우드 네이티브는 이.. 더보기
REST API와 HTTP Header REST APIREST(REpresentational State Transfer)의 약어로,인터넷을 통해 통신할 수 있게 하는 인터페이스입니다. 조금 더 자세히 설명하면,REST API는 HTTP URI를 통해 제어할 자원(Resource)을 명시하고, HTTP Method(GET, POST, PUT, DELETE)을 통해 해당 자원을 제어하는 명령을 내리는 방식의 아키텍처입니다. 위 아키텍처 방법을 통해 전송하는 것이 REST API 입니다.💡 REST API는 TCP/IP 프토로콜의 5계층인 응용 계층에 해당됩니다. REST API의 요청과 응답은 Header와 Body 부분이 있습니다. HTTP HeaderHeader는 요청과 응답에 대한 전반적인 정보를 담고 있습니다. HTTP 1.1 버전의 경.. 더보기
Mybatis selectKey 사용 방법 1. selectKey란? Mybatis는 DB에서 특정 값을 가져와서 쓸 수 있도록 selectKey 기능을 제공합니다. 보통 id 값을 auto-increment 해서 사용합니다. selectKey를 이용하면, 이 id 값을 바로 가져와서 쓸 수 있습니다. 밑에서 제가 사용할 도메인 코드는 다음과 같습니다. public class City { private int id; private String name; private String countryCode; private String district; private int population; // getter, setter 생략 } 2. selectKey 사용 방법 selecKey는 크게 after, before 방법으로 나눌 수 있습니다. 2.1 .. 더보기
Spring Web의 두 가지 기본 Context Context란 무엇일까요? 스프링이 관리하는 빈(Bean)을 담아두는 컨테이너라고 생각하시면 됩니다. Spring 프로젝트를 만들면 기본적으로 두 가지 컨텍스트가 만들어집니다. 첫 번째는 ApplicationContext입니다. 두 번째는 WebApplicationContext입니다. ApplicationContext는 주로 Service, Dao등 프로젝트 전체에서 공유하는 빈들을 저장합니다. WebApplicationContext는 주로 Controller와 같이 특정 서블릿(DispatcherServlet)에서만 사용되는 빈들을 저장합니다. Spring Web Mvc에서 빈을 참조할 때, 우선적으로 WebApplicationContext를 참조 하고 빈을 찾지 못하면 ApplicationConte.. 더보기
Spring Web MVC 동작 과정 스프링으로 웹 서버를 만들면, 특별한 서블릿을 바탕으로 사용자의 응답을 받을 수 있습니다. 이 서블릿 이름이 DispatcherServlet입니다. 스프링은 이 DispatcherServlet으로 사용자의 요청을 받고, 처리한 뒤 반환을 합니다. 그림은 아래와 같습니다. 위 그림의 순서를 바탕으로 설명을 덧붙여 보겠습니다. 1. DispatcherServlet이 Client로 부터 요청을 받음 2. DispatcherServlet이 어떤 컨트롤러 메소드에 가야하는지 HandlerMapping에 물어봄 3. HandlerMapping은 url에 매턴에 맞는 Controller와 메소드의 정보를 DispatcherServlet에 제공함 4. 응답을 받은 DispatcherServlet은 Conroller에게.. 더보기
findAll과 findById 조회의 차이 한 프로젝트에서 테스트케이스를 작성하는데, findAll에서 에러가 발생했습니다. member 객체를 mock으로 생성해서 발생하는 문제였습니다. mock객체는 가짜 객체입니다. mock으로 객체를 만들면 실제 값은 null입니다. mock객체의 모든 값은 null이지만 when으로 선언하면, Mockito가 프록시 방식으로 실제 동작할 때 값 대체합니다. 💡 여기서 프록시 방식이란, 요청을 가로채서 동작하는 방식을 의미합니다. 저는 테스트케이스 내부에 아래와 같이 영속성에 추가해줬습니다. 그러면, 모든 값이 null인 member mock 객체가 영속성 컨텍스트에 저장됩니다. 💡 entityManager를 통해 영속성 컨텍스트에 접근할 수 있습니다. 아래 테스트케이스를 보면 findById는 제대로 동.. 더보기