목차 최근 평소 관심있는 기술들을 사용하면서 원하는 서비스를 개발하고 싶다는 생각에 사이드 프로젝트를 진행하는 인데, 화면 개발을 진행하면서 드디어 .. CORS 문제에 직면하였다. 웹 개발자치고는 비교적 늦게 경험한 편이라고 생각해서 한편으로 부끄럽기도하지만, 워낙 웹 개발을 처음 시작할때 흔하게 만나면서도 중요한 이슈라는 생각이 들어 개념도 익힐 겸 단순히 해결만 하는게 아니라 짚고 넘어가보았다. 배경 Fail Books top-rated API call: AxiosError {message: 'Network Error', name: 'AxiosError', code: 'ERR_NETWORK', config: {…}, request: XMLHttpRequest, …} index.js:1210 arg1..
Motivation 1. Kafka Connector 내용을 공부하면서 DB에 실제로 카프카 커넥터를 붙여서 실행하고 사용해면 좋은 경험이 되고 더 잘 기억에 남을 것 같았음 ✔ 아쉬웠던 점 👉 자주 사용하는 ORACLE로 연동해보면 더 좋을 것 같다고 생각해서 시도를 했으나 잘 안됐음, 관련 글을 찾아봤는데 ORACLE에 Connector를 연동한 사례가 별로 없었음(MySQL은 비교적 예시도 많았으나, 오라클은 유독 없음. 오라클에 적용할 수 없는 어떤 이유가 있는건가.. 의문..) 👉 m1맥이라 오라클 서버를 실행할 수 없어서 오라클 클라우드에서 제공하는 Autonomous DB를 사용하고 있었는데, 여기에 카프카 커넥터를 적용한 사례가 하나 있긴했으나 Docker를 이용한 방법(나는 카프카 서버..
백엔드 개발과 관련한 업무에 대해 배우고 조금씩 실제 코드를 만져가며 작업을 하면서, 브라우저에서 사용자에게 화면을 보여주기 위한 두 렌더링 과정을 이해하고 차이를 분명히 알아두어 넘어갈 필요를 느꼈다. SSR(Server Side Randering)과 CSR(Client Side Rendering) 들어가기에 앞서, Rendering : 웹 페이지가 요청해서 (서버로부터) 받은 내용을 브라우저 화면에 표시하는 것 SSR(Server Side Rendering) - 서버 사이드 렌더링 서버쪽에서 렌더링 준비까지 마친 상태로 클라이언트에게 전달하는 방식 전통적인(오래된) 웹 애플리케이션에서 주로 사용 요청할때마다 서버에서 처리를 한 후 페이지에 응답 새로고침이 일어나면 새로운 페이지가 렌더링됨 과정 Use..
목차 배경 인텔리제이 환경에서 Spring Boot를 사용하지 않고, Maven 기반의 웹 프로젝트를 Tomcat을 통해서 웹 개발환경을 구축해보았다. (해당 코드는 git hub repository 에 올려두었습니다 : https://github.com/nooblette/mvn-tomcat-webapp) Maven과 Tomcat으로 웹 개발 환경 구축하기(+ IntelliJ) Spring + Maven + Tomcat으로 WAS 환경 구축을 위해 내가 준비한 툴과 버전은 다음과 같다. - IntelliJ : https://www.jetbrains.com/ko-kr/idea/download/#section=mac - Maven (3.8.5) : https://maven.apache.org/download..
(no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) Jackson을 사용해서 JSON을 파싱하는데 아래와 같은 에러 메시지가 떴고, 이를 해결하기 위한 방안이다. 2021-10-12 02:19:05.038 ERROR 11654 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing fa..
결과 조회 쿼리 객체에서 아래의 메서드들을 사용해 JPQL을 실행한다. query.getResultList()결과를 컬렉션으로 반환한다. 결과가 없으면 빈 컬렉션이 반환된다. 1건이면 1건만 들어간 컬렉션(List)이 반환된다. query.getSingleResult()결과가 정확히 1건 일때 사용한다. ➡️ 단일 결과가 보장 될 때만 사용 결과가 없으면 javax.persistence.NoResultException, 결과가 1건 이상이면 javax.persistence.NonUniqueResultException이 발생 출처
프로그램을 개발할때 예외처리는 흐름을 정하는데 매우 중요한 부분이다. 예외처리를 하는 경우와 방법은 다양하다. 메소드 내에서 어떤 상황을 예측해서 try - catch 요구사항에 대해 if - else 문으로 처리 스프링 시큐리티에서 인터셉터로 잡아서 UnauthorizedException 같은 예외처리 이러한 다양한 예외처리를 적용하다보면 코드는 엄청나게 복잡해지고 유지보수하기 어려워진다. 또한 비즈니스 로직에 집중하기 어렵고, 그와 무관한 코드가 더 많아지는 경우도 생긴다. 이 문제에 대해 스프링에서는 @ExcepionHandler와 @ControllerAdvice 어노테이션으로 개선할 수 있다. @ExceptionHandler - @Controller와 @RestController가 적용된 Bean..
스프링으로 웹 서버를 개발하다보면 json으로 데이터를 내려줘야 하는 경우가 생긴다. 이때 Jackson이나 Gson을 통해 java에 대한 JSON 데이터 바인딩을 지원받을 수 있다. 원래는 SimpleJSON을 사용했었는데 코드가 너무 지저분하고 길어져서, 이번 기회에 둘 중 한 라이브러리를 제대로 익혀두려고 한다. 1. Jackson 스프링 프레임워크에 내장되어있다. 직렬화(Java 객체 -> JSON) 1 2 3 ObjectMapper mapper = new ObjectMapper(); String jsonResult = mapper.writeValueAsString(json으로 바꾸고싶은 java객체); Colored by Color Scripter cs 역직렬화(JSON -> Java 객체) ..
이전에 스프링 부트 프로젝트에서 DB 접근 기술로 Mybatis를 사용할때는 정해진 규약없이 멋대로 데이터를 가져와서 사용하였다. DAO와 VO의 개념적으로나마 조금 알고 있었지만 제대로 사용하지는 못하였다. 이번에, JPA를 공부하면서 자바 객체와 테이블을 ORM하여 사용하게되는데 실제로 어떻게 쓰이는지 짚고 넘어가려고 한다. 1. Entity DB 테이블과 1:1 맵핑을 이루게될 클래스. 테이블 내에 존재하는 컬럼만을 필드(속성)로 가져와야한다. Entity 클래스는 상속받거나 구현체이면 안되고, 테이블에 없는 칼럼을 사용해도 안된다. - Setter 금지 및 생성자, 접근 제어 Entity는 테이블과 1:1 맵핑을 이루게 되므로 가장 core한 클래스이다. -> 그러므로 Setter를 무분별하게 사..
1. JPA(Java Persistant API) & Hibernate 자바 ORM 기술에 대한 표준명세. JPA는 ORM을 위한 인터페이스를 모아둔 것이며, 구현은 Hibernate, EclipseLink 등 ORM 프레임 워크를 사용해야한다. 스프링부트에서 DB에 접근할때 JDBC를 사용하는것보다 mybatis를 사용할때 코드가 간결해지고, 유지보수가 편해짐. 여기서, Hibernate를 사용하면 mybatis보다 더 코드가 간결해지고 객체지향과 생산성을 높일 수 있음. (JPA를 사용한다고 해서 JDBC를 사용하지 않는 것은 아님, 내부에서 JDBC API가 동작함) 2. ORM(Object Realtional Mapping) 객체와 테이블을 매핑 시켜주는 것. sql query가 아닌 method..
스프링 강의를 듣는 중인데 스프링에는 내장된 tomcat 서버 스프링 컨테이너 jsp와 서블릿 등.. 이런것들이 다 무슨 기능을 수행하며 무엇을 의미하는지 몰라서 그런지 전반적인 강의 내용 이해도 제대로 되지 않았다. 한 번씩 들어보긴 했던 단어들인데 확실하게 이해해두는 편이 좋을 것 같아 관련 내용들을 찾아보았다. 위 내용들을 이해하기위해선 웹 서버와 WAS의 차이를 알아야한다. 웹 서버(Web Server) 서버에서 클라이언트의 요청을 기다리고, 요청이 오면 받아들이고, 그 요청의 Data를 보내는 프로그램. 이때 보내는 Data는 정적인 Data(html, css, js, image)로 한정. -> apache가 가장 많이 쓰임 정적(static)이라는 것을 간단히 말하면 접속할 때 마다 변하지 않..
서버 개발자를 진로로 생각중인데 그렇다고해서 한 우물만 판다기 보다는 서버 + 프론트엔드, CentOS와 같은 리눅스, 머신러닝 or 딥러닝와 같은 추가적인 지식을 갖고 있으면 프로젝트나 실무에 투입되어 협업할때 더 도움이 될 수도 있고 단순히 그러한 지식이 있다는 것만으로도 나의 경쟁력을 키워준다고 생각한다. 이러한 이유도 있고 프론트와 자바스크립트에 대해 호기심도 생겨서 이번에 서버 사이드 개발을 다시 공부하면서 FE도 함께 해보는 중이다. 웹 브라우저(Web Browser)의 기본 구조 위와 같은 구조로 이루어져 있다. Browswer Engine - 브라우저와 관련된 소프트웨어를 동작하는 엔진. Rendering Engine - 웹 페이지에 대한 컨텐츠 및 데이터를 위해 동작하는 엔진. 렌더링 역..