![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/bOwYyP/btrgpMfZQ1L/jkEmGc8azLseE0KEQbvOD0/img.png)
절차적 프로그래밍 방식 입력을 받아 명시된 순서대로만 처리하고 결과를 내는 방식 구조적 프로그래밍 방식 절차적 프로그래밍 방식의 개선된 형태 프로그램을 함수단위로 나누고 함수끼리 호출하는 방식 큰 문제를 해결하기 위해 문제를 작은 단위들로 나누어 해결하는 방식 Top-Down 방식이라고도 한다. 객체 지향 프로그래밍 방식 구조적 프로그래밍 방식의 개선된 형태 큰 문제를 작게 쪼개는 것이 아니라, 작은 문제들을 해결하는 객체를 만든다. 객체들을 조합해 큰 문제를 해결하는 Bottom-Up 방식 OOP의 4가지 특징 1. 캡슐화 실제로 구현 부분을 외부에 드러내지 않는 것 변수의 메소드를 하나로 묶음 데이터를 직접 접근하는 것이 아닌 함수로 접근(get/set) Public, Private, Protecte..
프로그램을 개발할때 예외처리는 흐름을 정하는데 매우 중요한 부분이다. 예외처리를 하는 경우와 방법은 다양하다. 메소드 내에서 어떤 상황을 예측해서 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..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/Bm2lF/btrb2meDuDZ/xkOCwS7lIsX2kjhDi4stWK/img.png)
스프링 강의를 듣는 중인데 스프링에는 내장된 tomcat 서버 스프링 컨테이너 jsp와 서블릿 등.. 이런것들이 다 무슨 기능을 수행하며 무엇을 의미하는지 몰라서 그런지 전반적인 강의 내용 이해도 제대로 되지 않았다. 한 번씩 들어보긴 했던 단어들인데 확실하게 이해해두는 편이 좋을 것 같아 관련 내용들을 찾아보았다. 위 내용들을 이해하기위해선 웹 서버와 WAS의 차이를 알아야한다. 웹 서버(Web Server) 서버에서 클라이언트의 요청을 기다리고, 요청이 오면 받아들이고, 그 요청의 Data를 보내는 프로그램. 이때 보내는 Data는 정적인 Data(html, css, js, image)로 한정. -> apache가 가장 많이 쓰임 정적(static)이라는 것을 간단히 말하면 접속할 때 마다 변하지 않..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/dtHmZb/btraEgx8Uqt/OMsk7Kcw375rwdEdGkg360/img.png)
서버 개발자를 진로로 생각중인데 그렇다고해서 한 우물만 판다기 보다는 서버 + 프론트엔드, CentOS와 같은 리눅스, 머신러닝 or 딥러닝와 같은 추가적인 지식을 갖고 있으면 프로젝트나 실무에 투입되어 협업할때 더 도움이 될 수도 있고 단순히 그러한 지식이 있다는 것만으로도 나의 경쟁력을 키워준다고 생각한다. 이러한 이유도 있고 프론트와 자바스크립트에 대해 호기심도 생겨서 이번에 서버 사이드 개발을 다시 공부하면서 FE도 함께 해보는 중이다. 웹 브라우저(Web Browser)의 기본 구조 위와 같은 구조로 이루어져 있다. Browswer Engine - 브라우저와 관련된 소프트웨어를 동작하는 엔진. Rendering Engine - 웹 페이지에 대한 컨텐츠 및 데이터를 위해 동작하는 엔진. 렌더링 역..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/SNSFh/btraBTwFmB8/XsKaL9FMfsJktcGUn2sUP1/img.png)
웹 서버에 대해 많은 글이나 정보를 찾아보면 URL과 URI를 혼용해서 쓰는 경우가 많았다. 얼마나 유사한것인지 그리고 분명 명칭이 다른 이유가 있을텐데 어떤 차이점이 있는지 궁금해서 찾아보았다. URI URI는 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미한다. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스다. 다음과 같은 구조를 갖는다. scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment] scheme : 사용할 프로토콜을 뜻하며 웹에서는 http 또는 https를 사용 user와 password : (서버에 있는) 데이터에 접근하기 위한 사용자의 ..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/bKWsKJ/btq98tMT0rP/qXzqaxDxsm4COodRuYivxk/img.png)
HTTP Protocol(Hyper Text Transfer Protocol)은 인터넷상에서 데이터를 주고받기위한 프로토콜이며, TCP/IP 위에서 작동하고, html문서, 이미지, 동영상, 오디오 등 여러 종류의 데이터를 주고 받을 수 있다. 특징 1. 서버 클라이언트 모델을 따른다. 클라이언트는 클라이언트 소프트웨어(Chrome, Safari, Edge 등...)가 설치된 컴퓨터를 통해 URI를 이용해서 서버에 접속하여 요청을 보낸다 -> Request 서버는 서버 소프트웨어(Apache, nginx, IIS 등...)로 그 요청을 받아서 해석하고 응답을 한다 -> Response 위와 같은 요청/응답은 80번 포트를 통해 서비스한다. 2. Connectionless & Stateless http는 ..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/oFyvp/btq9yM7vbbZ/3CjsrxNUZulCZ2cZ94OEY0/img.png)
대게 웹 서비스를 개발할때 MVC 패턴이라는 디자인 패턴중 하나를 사용하게된다. 장고는 이 MVC패턴과 유사한 MTV 패턴을 사용한다. 졸업프로젝트로 서버를 개발하다 급하게 특정 서비스를 배포하기 위해 파이썬을 사용해야 할때가 생겨서 장고를 사용한 적이 있다. 원래 스프링으로 개발했기 때문에 MVC패턴에만 익숙한 상황에서 장고를 쓰다보니 기본적인 기능조차 이해가 되지 않았고, 구현하는데도 한참 걸렸다. MVC 패턴에 관한 글 보러가기 ➡ Web Service - MVC 패턴 (tistory.com) Web Service - MVC 패턴 서버 개발자로 지원할때(웹 프론트나 모바일 애플리케이션은 지원해본적이없어서 모르겠다) 단골로 등장하는 질문이다. MVC패턴에 대해 설명해주세요 누군가가 이것에대해 설명해달..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/TUtWX/btq9AhTc9th/ojDzkq20Z2xSRoxXOv1db0/img.png)
이와같은 MVC패턴 구조를 갖도록 개발을 할때, 스프링부트(혹은 스프링)을 이용하면 데이터에 접근하기위해 DAO, DTO, VO, Entity라는 개념을 사용하게 된다. 이에 대해 한번 정리를 해보고자 한다. Domain 소프트웨어로 해결하고자 하는 모든것을 통틀어서 부르는 말. 소프트웨어로 개발하려는 혹은 개발한 특정 개념들을 묶은 것이라고 이해하시면 됩니다. 예를들어, 크게는 쇼핑몰 도메인, 작게는 주문 도메인 등에 해당합니다. 출처 : OKKY - DAO, DTO, VO 개념이 정확히 뭔가요? 소프트웨어로 하고자하는 모든 것을 일컫는 표현이라고 받아들였다. DAO - Data Access Object 실제로 DB에 접근에서 데이터에 대해 CRUD를 수행할 객체이다. (데이터베이스를 객체로 표현하는 ..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/bbRqSC/btq9ymNK8g0/fn0AVArjEAU17q6PSlUgRk/img.png)
서버 개발자로 지원할때(웹 프론트나 모바일 애플리케이션은 지원해본적이없어서 모르겠다) 단골로 등장하는 질문이다. MVC패턴에 대해 설명해주세요 누군가가 이것에대해 설명해달라고하면 늘 두루뭉실하게 대답하는 것 같아서 이번 기회에 제대로 정리를 해두려고 한다. MVC Pattern 바퀴를 재발명하지마라. 라는 유명한 말이 있다. 어떤 프로젝트를 개발할때 처음부터 모든것을 하나하나 스스로 개발하려고 한다면 엄청난 노력과 시간이 걸릴 것이다. 또한 누군가가 자신의 입맛대로 만든다면 추후에 다른 개발자가 유지보수하기에도 힘들 것이다. 이에 대해 유지보수를 포함한 모든과정을 보다 쉽고 편리하게 만들기위해 디자인패턴이라는 것이 존재한다. 디자인패턴이란? 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을..