본문 바로가기
반응형

분류 전체보기1065

[Spring Boot] : MVC 패턴 적용해보고 한계 체크하기(2) 서블릿을 컨트롤러로 사용하고 JSP를 뷰로 사용하는 MVC 패턴을 사용해 본다. 사실 이거는 내가 전에 진행했던 프로젝트 구성과 비슷해서 친근한데 이제는 잘 안 쓰는 기술이라고 한다. 앞으로 조금 더 발전된 기술을 배우기 위해 열심히 강의를 듣고 공부를 한다. 회원 등록 폼 -View를 먼저 코딩해 본다. 강의 자료에서 발췌한 부분으로 모든 부분을 오픈할 수는 없고 일부분을 뗴어올 수 있다 출처는 글 맨 아래 남긴다. String viewPath = "/WEB-INF/views/new-form.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); dis.. 2022. 1. 21.
[Spring Boot] : MVC 패턴 적용해보고 한계 체크하기(1) 전에 공부했듯이 서블릿과 JSP는 한계가 있다. 프로젝트가 커질수록 더 코드도 복잡해지고 하나의 페이지가 너무 많은 역할을 하게 되고 결국 유지보수가 어려워지게 된다. 강의에서는 변경 라이프 사이클을 중요하게 다루고 있다. 예로는 UI 수정과 비즈니스 로직 수정은 각각 다르게 발생할 가능성이 매우 높고 서로에게 영향을 주지 않는데 이렇게 라이프 변경 사이클이 다른 부분을 하나의 코드로 관리하는 것은 유지보수에 좋지 않다고 한다. 때문에 라이프 사이클이 다른 코드를 분리해 주는 것이 매우 중요하다. MVC 패턴은 Model, View, Controller의 약자이다. MVC 패턴에서는 위에서 하나의 페이지에서 처리한 것들을 좀 분산해서 서로 역할을 나눈 것을 말 하며 보통 웹 애플리케이션에서 자주 사용된다.. 2022. 1. 21.
[Spring Boot] : JSP로 회원 관리 구현하기 JSP를 사용하기 위해 라이브러리를 먼저 추가해 주었다. //JSP 추가 시작 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'javax.servlet:jstl' //JSP 추가 끝 build.gradile에 dependencies {} 안에 추가해 주면 된다. 추가하고 refresh해 주는 것을 잊지 않도록 한다. username: age: 전송 먼저 회원 등록 form을 코딩해 주었다. 맨 윗 줄에 있는 코드는 jsp를 사용하기 위해 꼭 있어야 하는 코드라고 한다.(JSP문서라는 뜻이고 JSP문서는 이렇게 시작한다고 한다.) 보면 html을 사용하기 위한 형식과 utf-8로 인코딩을 설정해주고 java 사용을 명.. 2022. 1. 21.
[Spring Boot] : Servlet을 통한 회원 관리 웹 애플리케이션 구현 서블릿을 통해 회원 등록 HTML 폼을 만들어 본다. w.write( "\\n" + " username: \\n" + " age: \\n" + " 전송\\n" } 일부 코드인데 PrintWriter w = response.getWriter(); 를 통해 HTML 코드를 작성해 준다. response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); 사전에 response 객체 설정을 통해 HTML을 읽을 수 있는 형식으로 셋팅을 해 주어야 한다. 이렇게 하면 단순하게 회원 정보를 입력할 수 있는 HTML Form이 생긴다. input으로 값을 받고 submit으로 값을 전달해준다. 값을 입력하고 전송을 누르면 데이터가 저장이 되도록.. 2022. 1. 21.
[Spring Boot] : 회원 정보를 간단하게 저장하고 조회를 할 수 있는 기능을 구현 회원 정보를 간단하게 저장하고 조회를 할 수 있는 기능을 구현해 본다. @Data public class Member { private Long id; private String username; private int age; } 회원 관련 데이터를 만들어 주었고 lombok 라이브러리를 통해 @Data 어노테이션을 사용해서 Getter와 Setter를 자동 생성하게 해 주었다. 강의에서는 @Getter @Setter를 사용했는데 스터디에서 배운 @Data 어노테이션을 활용해 보았다. lombok 공식 문서 @Data 참고 public class MemberRepository { private static Map store = new HashMap(); private static long sequence.. 2022. 1. 21.
[TIL] : 86 일일 배움을 위한 Today I Learned ! Spring Boot 스프링 부트를 공부하면서 HTTP에 관한 응답을 받는 방법에 대해 공부했다. 최근 스터디에서 한 쌤이 공식 문서를 참고해서 개발하는 습관을 들이면 정말 좋다고 하셔서 공식 문서와 라이브러리를 뒤져가면서 공부를 해 봤다. 확실히 다른 느낌이다. 예전에는 사용법을 알고 쓰는 느낌이었다면 이번에 공부한 것은 어떻게 구성되어 있는지 알고 사용할 수 있는 것 같은 느낌이다. 물론 아직 완전하게 클래스와 인터페이스를 찾아볼 수 있는 실력은 못 되기 때문에 공식 문서를 참고하여 조금 더 깊게 볼 수 있는 부분에서 만족한다. 생각보다 공식 문서를 참고하면 자세한 정보를 얻을 수 있었고 괜찮은 것 같다. 전에는 그래도 공식 문서에서 개인 의견이 들어.. 2022. 1. 20.
[Spring Boot] : HTTP 응답을 JSON으로 반환하기 response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); **HelloData helloData = new HelloData(); helloData.setUsername("Oh"); helloData.setAge(27); //{"username" : "Oh", "age" : 27} String result = objectMapper.writeValueAsString(helloData); response.getWriter().write(result);** HTTP 응답으로 JSON 반환할 때는 ContentType을 application/json 형식으로 지정을 해줘야 한다. 참고하면 스펙상 utf-8을 지원하기.. 2022. 1. 20.
[Spring Boot] : HTTP 단순 텍스트 응답과 HTML 응답 HTTP 응답 데이터 - 단순 텍스트, HTML 단순 텍스트 응답, HTML 응답, HTTP API - MassageBody JSON 응답이 있다. 단순 텍스트 응답은 writer.println(”ok”);를 통해 사용했었고 HTML응답을 체크해 본다. response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); HTTP 응답으로 HTML을 반환할 때는 content-type을 text/html로 지정해야 한다. PrintWriter writer = response.getWriter(); writer.println(""); writer.println(""); writer.println(" 안녕?"); writer.println.. 2022. 1. 20.
[Spring Boot] : HttpServletResponse 기본 사용법과 응답 코드 HttpServletResponse 기본 사용법과 응답 코드 HttpServletResponse는 인터페이스이며 ServletRequest를 상속받는다. public interface HttpServletRequest extends ServletRequest { } 실제로 확인해 보면 이렇게 인터페이스로 구현되어 있는 것을 확인할 수 있다. 추가로 공식 문서를 참고하면 이렇다. Extends the ServletResponse interface to provide HTTP-specific functionality in sending a response. For example, it has methods to access HTTP headers and cookies. The servlet container.. 2022. 1. 20.
[TIL] : 85 일일 배움을 위한 Today I Learned ! 파이썬 알고리즘 문제풀이 오랜만에 파이썬 문제를 풀었다. 꾸준히 해야지 하는데 문제가 어려워서 할 맛이 안 난다고 해야하나.. 앞으로 한 문제씩이라도 해야겠다. 2022.01.19 - [Algorithm/파이썬 알고리즘 문제풀이 (코딩테스트대비)] - [파이썬 알고리즘 문제풀이] : 봉우리 코드 리뷰 세미나 코드 리뷰 세미나를 듣고 후기를 남겼다. 2022.01.19 - [발전소/강연 및 세미나] - [강연 및 세미나] : 한번 듣고 평생 써먹는 코드 리뷰 노하우 후기 Spring Boot HTTP 파라미터를 조회하는 방법에 대해 공부했다. 2022.01.19 - [Framework/Spring Boot] - [Spring Boot] : Get 쿼리 파라.. 2022. 1. 19.
[코딩&리뷰] : 스터디 3회차 스터디 3회차 스터디 3회차까지 도달했다. 오늘은 스터디원의 변화도 있었다. 같이 하기로 했던 어떤 쌤이 한 번도 참여하지 못 하고 3회차를 마무리로 그만두셨다. 참여한 적도 없어서 별 감흥이 없지만 확실히 참여를 할 수 있는 상태에서 스터디 참여를 했다면 더 좋았을 것 같다는 생각만 든다. 한 분이 나갔으니 다른 사람을 구해야해서 오늘 새로운 쌤을 구했다. 다음 주 부터 참여 할 예정이고 오늘은 어떤 식으로 돌아가는지 간단하게 설명하고 마무리했다. 스터디는 나 포함 3명에서 진행했다. 3회차 모두 3명에서 진행했다... 저번에 스터디 2회차 때 한 쌤이 간단한 Java를 설명해 주셨는데 잘 이해가 안 되어서 기본을 다지자고 마음먹고 한 주 동안은 기본을 다시 다졌다. 그리고 오늘 한 주간 공부한 내용을.. 2022. 1. 19.
[파이썬 알고리즘 문제풀이] : 봉우리 코딩 테스트 문제 풀이 문제 이름 : 봉우리 지도 정보가 N*N 격자판이 주어진다. 격자판에 있는 숫자 중 상하좌우에 있는 숫자보다 큰 숫자는 봉우리 지역인데 이 봉우리 지역이 몇 개인지 구하라. 격자의 가장 자리는 0으로 초기화가 되어 있다고 가정한다. n = int(input()) a = [list(map(int, input().split())) for _ in range(n)] dx=[-1, 0, 1, 0] dy=[0, 1, 0, -1] a.insert(0, [0]*n) a.append([0]*n) for x in a: x.insert(0, 0) x.append(0) cnt = 0 for i in range(1, n+1): for j in range(1, n+1): if all(a[i][j] > a.. 2022. 1. 19.
[Spring Boot] : HTTP message body를 통한 데이터 전송, 파라미터 조회 HTTP message body HTTP API에서 주로 사용한다. JSON, XML, TEXT 데이터 형식은 주로 JSON을 사용한다. @WebServlet(name = "RequestBodyStringServlet", urlPatterns = "/request-body-string") public class RequestBodyStringServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletInputStream inputStream = request.getIn.. 2022. 1. 19.
[Spring Boot] : HTTP의 Form을 통해 클라이언트에서 서버로 데이터 전송하기 HTTP의 Form을 통해 클라이언트에서 서버로 데이터를 전송한다. 주로 회원 가입이나 상품 주문 등에서 자주 사용한다고 한다. username: age: 전송 HTML의 Form 태그의 action 속성을 통해 값을 받을 경로를 설정하고 button 태그의 submit을 주어 action의 경로로 데이터를 전달하게 된다. 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부한 내용입니다. 2022. 1. 19.
[Spring Boot] : Get 쿼리 파라미터를 통해 파라미터를 조회하기 GET 쿼리 파라미터 username=OHJUHYEON age=27 위 데이터를 클라이언트에서 서버로 전송하는데 URL의 쿼리 파라미터를 통해 데이터를 전송해 본다. GET 쿼리 파라미터를 통해 파라미터를 조회하는 방법은 3가지 정도가 있다. request.getParameterNames().asIterator() .forEachRemaining(paramName -> System.out.println(paramName + "=" + request.getParameter(paramName))); 파라미터 전체를 다 조회하는 방법이다. String username = request.getParameter("username"); String age = request.getParameter("age"); 단일.. 2022. 1. 19.
[강연 및 세미나] : 한번 듣고 평생 써먹는 코드 리뷰 노하우 후기 코드 리뷰 : 지속 가능한 SW 개발 참석일 : 21.01.18 유형 : 실시간 온라인 강연 주제 : 코드리뷰 : 지속 가능한 SW 개발 | 한번 듣고 평생 써먹는 코드 리뷰 노하우 발표자 : 백명석 님 참고 링크 : https://okky.kr/article/1135478 월 마다 있는 OKKY 커뮤니티의 세미나에 참석했다. 비용은 만원인데 강연의 내용은 분명 그 이상의 가치를 가지고 있다고 확신한다. 아직 이런 세미나는 2번 밖에 참여를 못 해 봤는데 지금까지의 두 강연은 너무 좋았다. 특히 이번에 백명석님이 강연하신 코드 리뷰에 관한 주제는 나에게 더욱 좋은 주제였다. 나는 아직 현직에서 일을 해 본 경험은 없는데 서로 성장하는 방법에 관심이 많다. 나는 이것을 "지식 나누기"라고 말을 하고 있는데.. 2022. 1. 19.
[TIL] : 84 일일 배움을 위한 Today I Learned ! Spring Boot 오늘부터 다시 강의 진도를 나간다. 기존에 HTTP 강의를 조금 건너 뛰고 MVC부터 다시 보기로 했다. 코딩에 들어가기 앞서 이론 진도를 나간 부분에 대한 공부이다. 2022.01.18 - [Framework/Spring Boot] - [Spring Boot] : Web Server와 Web Application Server 2022.01.18 - [Framework/Spring Boot] - [Spring Boot] : Servlet, 서블릿 2022.01.18 - [Framework/Spring Boot] - [Spring Boot] : Thread, 쓰레드에 대해서 2022.01.18 - [Framework/Spring Boo.. 2022. 1. 18.
[Spring Boot] : HTML, HTTP API, CSR, SSR 정적 리소스 고정된 HTML, CSS, JS 등을 제공한다. 요청 → 이미 생성된 리소스 파일 ( /C/hello.html 등)을 웹 브라우저에 보내준다. HTML 페이지 동적으로 필요한 HTML 파일을 생성해서 전달한다. 요청 → WAS에서 DB 조회를 한다. → 동적으로 HTML을 생성한다. (JSP, 타임리프 등) → HTML을 웹 브라우저에 보내준 HTTP API HTML이 아니라 데이터를 전달한다. JSON 형식 사용한다. 다양한 시스템에서 호출한다. HTTP 위에 JSON을 통해 데이터를 주고 받는다. -> 웹 백엔드 개발자 백엔드 개발자는 정적 리소스, HTML 페이지(동적), HTTP API이 세 가지 방법에 대해 고민을 해 봐야 한다. SSR | 서버 사이드 렌더링 서버에서 최종 HTML.. 2022. 1. 18.
[Spring Boot] : Thread, 쓰레드에 대해서 클라이언트에서 서브를 요청하면 WAS가 응답을 하는 게 보통이다. 서블릿은 누가 호출하지? 쓰레드가 호출한다. 쓰레드란? 애플리케이션 코드를 순차적으로 실행한다. 쓰레드가 없다면 자바 애플리케이션 실행이 불가능하다. 자바에서는 메인 메서드를 실행하게 되면 main이라는 이름의 쓰레드가 실행하게 된다. 쓰레드는 한 번에 하나의 코드 라인만 수행한다. 동시 처리에 경우 필요에 따라 쓰레드를 추가 생성한다. 단일 요청 : 쓰레드를 하나만 사용한다. 요청이 들어온다. → WAS에서 쓰레드를 할당한다. → 쓰레드는 서블릿을 호출한다. → 서블릿이 요청에 응답한다. 위와 같은 원리로 움직이지만 만약 쓰레드 요청이 여러개 들어왔을 경우를 보자. 요청이 들어왔고 쓰레드를 할당 받아서 서블릿을 호출하고 있는데 어떤 이유.. 2022. 1. 18.
[Spring Boot] : Servlet, 서블릿 Servlet urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행된다. 서블릿 컨테이너 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다. 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다. 서블릿 객체는 싱글톤으로 관리한다. 요청마다 객체를 생성하는 것은 비효율적이다. 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용한다. 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근한다. 공유 변수 사용을 주의한다. 싱글톤을 사용할 때는 멤버 변수를 사용할 때 조심해야 한다. JSP도 서블릿으로 변환되서 사용한다. 동시 요청을 위한 멀티 쓰레드 처리를 지원한다. 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부한 내용입니다. 2022. 1. 18.
[Spring Boot] : Web Server와 Web Application Server 웹 서버 HTTP 기반으로 동작한다. 정적 리소스와 부가 기능들을 제공한다. 웹 애플리케이션 서버 (WAS) HTTP 기반으로 동작한다. 웹 서버 기능을 포함한다. 정적 리소스 제공 및 부가 기능 등 프로그램 코드를 통해 애플리케이션 로직 실행이 가능하다. 동적 HTML, HTTP API(JSON), ( REST API ) 서블릿, JSP, 스프링 MVC Tomcat, Jetty 등 웹 서버와 WAS 차이 웹 서버는 정적 리소스 제공, WAS는 애플리케이션 로직을 실행할 수 있다. 차이가 애매하다. 웹 서버도 프로그램을 실행하는 기능을 포함하기도 한다. 웹 애플리케이션 서버도 웹 서버의 기능을 제공한다. 자바는 서블릿 컨테이너 기능르 제공하면 WAS 서블릿 없이 자바코드를 실행하는 서버 프레임워크도 있다.. 2022. 1. 18.
반응형