본문 바로가기

자바23

[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(7) -스프링 MVC를 활용한 간단한 웹페이지를 만들어본다. -요구사항 분석 후 알맞은 도메인, HTML, 서비스 로직 등을 개발한다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture4_Item-Service) 7.스프링 MVC - 웹 페이지 만들기 1.프로젝트 생성 우선 프로젝트를 다음과 같이 생성한다.(https://start.spring.io/) 2.요구사항 분석 핵심 요구사항은 상품을 관리할 수 있는 서비스다. 상품도메인 모델은 다음과 같다. 상품ID, 상품명, 가격, 수량 관련된 기능은 다음과 같다. 상품목록, 상품상세, 상품등록, 상품수정 서비스 흐름은 다음과 같다. 클라이언트(사용자)는 상품 목록을 조회한다. 상품 등록 클릭시, 상품.. 2022. 7. 3.
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(6) - 스프링 MVC의 기본 기능을 알아본다. - 스프링 로깅에 대해 간단히 알아본다. - HTTP 요청과 응답을 처리하는 다양한 방식을 알아본다. - HTTP 메시지 컨버터에 대해 알아본다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture4_springMVC) 6.스프링 MVC - 기본 기능 1.프로젝트 생성 및 Welcome 페이지 만들기 스프링 부트 스타터 사이트에서 프로젝트를 생성한다. 이 때 Packaging을 Jar로 선택한다. Jar는 항상 내장서버(톰캣)를 사용하고 webapp 경로를 사용하지 않는다. 내장 서버 사용에 최적화 되어 있다. 반면, War를 사용하면 내장서버도 사용가능 하지만 주로 외부 서버 배포 목적으로 사용한다... 2022. 6. 18.
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(5) -이전 시간에 단계별로 만든 'MVC 프레임워크'와 '스프링 MVC'를 비교해본다. -스프링MVC에서 핸들러매핑, 뷰리졸버가 어떻게 사용되는지 확인한다. -컨트롤러 사용시 컨트롤러 인터페이스 방식과 애노테이션 방식을 학습하며 실무에서 사용되는 법을 학습한다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture4) 5.스프링 MVC 구조 이해 1.스프링 MVC 전체 구조 직접만든 MVC프레임워크와 스프링 MVC를 비교해보자. FrontController -> DispatcherServlet handlerMappingMap -> HandlerMapping MyHandlerAdapter -> HandlerAdapter ModelView -> Mode.. 2022. 6. 14.
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(4) -이전 시간의 JSP, 서블릿 회원관리 개발을 하며 느낀 단점을 보완하기 위해 MVC프레임워크를 만들어본다. -버전을 5가지로 만들어 본다. 프론트 컨트롤러 도입(v1), View분리(v2), Model 추가(v3), 단순하고 실용적인 컨트롤러(v4), 유연한 컨트롤러(v5)로 단계별로 만들어 본다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture4) 4.MVC 프레임워크 만들기 여기서는 기존 회원관리 애플리케이션의 단점을 한 단계씩 버전업하면서 단계별로 만들어본다. 버전별로 먼저 어떻게 변경되는지 간단하게 정리하면 다음과 같다. v1 : 프론트 컨트롤러라는 것을 도입한다. 말 그대로 기존 컨트롤러에 앞서 동작하는 부분으로, 요청에 맞는 컨.. 2022. 6. 4.
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(3) -회원관리 웹 애플리케이션을 간단하게 만들어본다. -처음에 서블릿 방식만 사용하여 만들고 JSP 방식으로도 만들어본다. -마지막으로 MVC방식으로 만들어 서블릿방식, JSP방식의 단점을 보완해본다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture4) 3.서블릿, JSP, MVC 패턴 1.회원 관리 웹 애플리케이션 요구사항 이전 시간에는 서블릿에서 요청 데이터를 가져와서 처리하는 방법, 응답 데이터를 보낼 때 처리하는 방법 등을 살펴보았다. 이번 시간에는 본격적으로 간단한 회원관리 웹 애플리케이션을 만들어본다. 처음에는 서블릿을 통해서만 개발하면서 자바 코드 안에 HTML 작성을 해본다. 두번쨰로 서블릿을 통한 개발의 단점을 느끼고, JSP를.. 2022. 5. 31.
[에러]java.lang.Integer cannot be cast to java.lang.String 해결방법 -java.lang.Integer cannot be cast to java.lang.String 해결방법을 알아본다. 1.에러 내용 캐스팅 대상이 Integer(int)인 경우 String으로 캐스팅할 때 (String)을 붙여 캐스팅하면 이 에러가 발생한다. 나는 프로젝트에서 map.get(값)으로 가져온 값이 int값인데 (String)map.get(값)으로 캐스팅하면서 발생했다. VO를 만들어 쓸 걸 그랬다. 2.해결 방법 String으로 캐스팅하려면 방법이 여러가지 있지만 보통 (String)으로 처리할 수 있다. 그러나 이건 캐스팅 대상이 문자열일 때 사용 가능하다. 캐스팅 대상이 실제로 Integer 타입이면 바로 (String)캐스팅시 저런 에러가 발생한다. 이럴 때 String.valueO.. 2022. 5. 27.
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(1) -인프런 김영한 강사님의 스프링 MVC 1편 강의를 정리한다. -웹 애플리케이션에 대한 이해와 웹서버, WAS, 서블릿, 멀티쓰레드 처리 등에 대해 Intro 학습을 한다. -추후 모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture4) 신청만 해두고 미루고 미루다가 다시 시작했다. 로드맵3을 작성 안 했는데 HTTP 강의 수강한 거 얼른 정리할 예정이다. 1.웹 애플리케이션의 이해 1.웹 서버, 웹 애플리케이션 서버 웹에서 모든 형태의 데이터는 현재 HTTP 형식으로 전달된다. 서버끼리 데이터 주고받을 때도 HTTP로 통신한다. 웹 애플리케이션 통신은 웹서버와 웹 애플리케이션 서버를 통하여 통신한다. 1)웹서버 HTTP기반 동작이며 정적리소스(H.. 2022. 5. 12.
[인프런 김영한 로드맵2]스프링 핵심 원리 정리(5) -인프런 김영한 강사님의 스프링 핵심 원리를 정리한다. -의존관계 주입의 개념, 방법 등에 대해 알아본다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture2) 7.의존관계 자동 주입 1.다양한 의존관계 주입 방법 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter) 필드 주입 일반메서드 주입 생성자 주입이 가장 추천된다. 생성자 호출 시점에 1번만 호출되며 불변객체로 유지된다. 또한 생성자가 1개인 경우 @Autowired를 생략할 수 있다. 생성자 주입 코드는 다음과 같다. 수정자 주입은 setter를 통해 주입한다. 컴파일 이후에도 변경 가능성이 있기 때문에 선택, 변경 가능성이 있는 의존관계에 사용된다. 필드 주입은 필드에.. 2022. 3. 5.
[인프런 김영한 로드맵2]스프링 핵심 원리 정리(4) -인프런 김영한 강사님의 스프링 핵심 원리를 정리한다. -싱글톤 패턴의 개념과 한계를 살펴본다. -싱글톤 패턴의 한계를 해결하는 스프링 컨테이너를 살펴본다. -기존 @Bean을 통한 설정방식에서 @ComponentScan을 통한 컴포넌트스캔 방식을 살펴본다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture2) 5.싱글톤 컨테이너 1.웹 애플리케이션과 싱글톤 스프링은 대부분 기업용 웹 애플리케이션을 지원하기 위해 탄생했다. 웹 애플리케이션은 동시에 여러 고객의 요청이 들어오게 된다. 그렇기 때문에 요청에 따라 객체가 새로 생성되면 메모리낭비가 심하다. 싱글톤 패턴으로 공유하도록 하면 메모리 낭비 등을 막을 수 있다. 2.싱글톤 패턴 자바코드로.. 2022. 2. 26.
[인프런 김영한 로드맵2]스프링 핵심 원리 정리(3) -인프런 김영한 강사님의 스프링 핵심 원리를 정리한다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture2) 3.스프링 핵심 원리 이해2 - 객체 지향 원리 적용 새로운 할인 정책을 개발해본다. 기존 고정 할인 정책을 변경할 때 OCP, DIP 원칙을 위반하게 되는 문제점을 의존관계주입 방식을 통해 해결해본다. 1)새로운 할인 정책 개발 새로운 할인 정책은 주문 금액에 10%를 할인해주는 정책이다. 할인 정책 인터페이스 DIscountPolicy를 구현한 RateDiscountPolicy를 만든다. 그리고 OrderServiceImpl은 새로운 할인 정책을 사용하도록 변경한다. 2)새로운 할인 정책 적용과 문제점 위의 할인정책코드를 보면 역할.. 2022. 2. 4.
[인프런 김영한 로드맵2]스프링 핵심 원리 정리(2) -인프런 김영한 강사님의 스프링 핵심 원리를 정리한다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture2) 2.스프링 핵심 원리 이해1 - 예제 만들기 지금까지 객체지향의 원리에 대한 전반적인 설명과 이 원리가 스프링과 어떤 연관성이 있고 스프링이 객체지향적으로 개발을 할 수 있게 해준다는 점을 언급하였다. 이 파트에서는 프로젝트를 생성하고 회원 도메인 설계와 개발 및 테스트, 주문과 할인 도메인 설계, 개발 및 테스트를 진행한다. 순수한 자바코드로 진행한다. 1)프로젝트 생성 스프링 이니셜라이져 사이트(https://start.spring.io/)에서 프로젝트를 생성한다. 다음과 같은 스펙으로 생성한다. Project : Gradle Pr.. 2022. 1. 29.
[인프런 김영한 로드맵2]스프링 핵심 원리 정리(1) -인프런 김영한 강사님의 스프링 핵심 원리를 정리한다. -모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture2) 1.객체 지향 설계와 스프링 1)자바 진영의 추운 겨울과 스프링의 탄생 스프링 탄생 배경을 간단하게 소개한다. 기존에 EJB라는 표준 기술을 사용하다가 로드 존슨에 의해 스프링이 세상에 처음 나왔다. 이후 몇몇의 개발자들과 퇴근하고 만들었다는데 대단하다는 생각밖에.. 스프링 버전별 핵심특징은 정리해두는 것이 좋을 것 같다. 2003년 스프링 프레임워크 1.0 : XML 2006년 스프링 프레임워크 2.0 : XML 편의 기능 지원 2009년 스프링 프레임워크 3.0 : 자바 코드 설정 2013년 스프링 프레임워크 4.0 : 자바8 20.. 2022. 1. 23.
[자바, 스프링]인프런 김영한 로드맵1, 스프링 입문 강의 정리4 -인프런 김영한 강사님의 스프링 입문 강의 핵심 위주로 정리한다.-모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture1)-이전 글은 아래 링크를 참고해주세요.  [자바, 스프링]인프런 김영한 로드맵1, 스프링 입문 강의 정리3-인프런 김영한 강사님의 스프링 입문 강의 핵심 위주로 정리한다.-모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture1)-이전 글은 아래 링크를 참고해주세요.  [자바, 스프링]roadofdevelopment.tistory.com 8.AOP 1)AOP가 필요한 상황지금까지 만든 서비스들(회원가입, 회원조회 등)의 동작 시간 측정 로직을 서비스 메소드마다 달아야 하는 .. 2022. 1. 10.
[자바, 스프링]인프런 김영한 로드맵1, 스프링 입문 강의 정리3 -인프런 김영한 강사님의 스프링 입문 강의 핵심 위주로 정리한다.-모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture1)-이전 글은 아래 링크를 참고해주세요.  [자바, 스프링]인프런 김영한 로드맵1, 스프링 입문 강의 정리2-인프런 김영한 강사님의 스프링 입문 강의 핵심 위주로 정리한다.-모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture1)-이전 글은 아래 링크를 참고해주세요.  [자바, 스프링]roadofdevelopment.tistory.com 7.스프링 DB 접근 기술 메모리DB가 아닌 H2 DB를 사용하여 순수JDBC, JdbcTemplate, JPA, Spring JPA 순으.. 2022. 1. 1.
[자바, 스프링]인프런 김영한 로드맵1, 스프링 입문 강의 정리2 -인프런 김영한 강사님의 스프링 입문 강의 핵심 위주로 정리한다.-모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture1)-이전 글은 아래 링크를 참고해주세요.  [자바, 스프링]인프런 김영한 로드맵1, 스프링 입문 강의 정리1-인프런 김영한 강사님의 스프링 입문 강의 핵심 위주로 정리한다.-모든 소스는 깃허브에서 관리한다.(https://github.com/coderahn/Spring-Lecture1)5개월전에 한 번 듣긴 했었는데 너무 빠르게 듣고 강의 듣roadofdevelopment.tistory.com  4.회원 관리 예제 - 백엔드 개발1)비지니스 요구사항 정리간단한 회원관리 예제를 만든다. 회원등록과 조회 기능을 만든다. 데이터 저장소.. 2021. 12. 12.
[디자인패턴]빌더 패턴(Builder Pattern) -객체를 생성하는 패턴 중 하나인 빌더 패턴(Builder Pattern)을 알아본다. -빌더 패턴 이전에 객체를 생성하는 가장 일반적인 패턴인 점층적 생성자 패턴, 자바빈 패턴을 먼저 알아본다. -이번 포스팅은 기계인간 John Grib님의 블로그를 많이 참고하여 학습하였다.(출처는 아래에 표시) 빌더 패턴이란? 객체를 생성하는 방법은 여러가지가 있는데, 일반적으로 생성자에 인자를 넣어 인스턴스를 생성하는 방법이나 setter를 이용하는 자바빈 패턴을 많이 사용한다. 빌더패턴은 이런 패턴들의 단점을 좀 더 개선한 방법이다. 우선 빌더 패턴을 소개하기 전에 점층적 생성자 패턴, 자바빈 패턴을 소개한 후, 이들의 단점을 개선한 빌더 패턴을 마지막으로 소개한다. 점층적 생성자 패턴 생성자를 통한 인스턴스 생.. 2021. 3. 21.
깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)의 이해 -자바에서 객체를 복사하는 두 가지 방법에 대해 알아본다. 디자인패턴 중 프로토타입 패턴을 학습하면서 깊은 복사, 얕은 복사의 개념이 나왔다. 이 기회에 제대로 알아볼 생각으로 글을 쓴다. 대충 알고 있었는데 예시를 작성하며 내부 동작 등을 제대로 파악해보려고 한다. 얕은 복사와 깊은 복사의 개념 얕은 복사(Shallow Copy)란 객체의 실제 값이 아닌 참조값(주소값)을 복사하는 것이다. 반면 깊은 복사(Deep Copy)란 참조값이 아닌 인스턴스를 새로 복사하여 아예 실제값을 복사하는 것이다. 밑의 예제로 설명하는 것이 더 이해가 쉽기 때문에 바로 예제로 들어간다. 얕은 복사(Shallow Copy) 우선 Fruit이라는 클래스를 다음과 같이 만든다. Fruit.java public class Fr.. 2021. 3. 15.
[디자인패턴]싱글톤 패턴(Singleton Pattern) -디자인패턴 중 싱글톤패턴에 대해 학습한다. 싱글톤패턴이란? 싱글톤패턴이란 객체를 하나만 생성하여, 이후 생성된 하나의 객체만을 참조하여 사용하는 패턴이다. new 연산자로 직접 인스턴스를 생성하지 못하게 하고, 인스턴스를 생성할 수 있는 static method를 만들어 이를 통해 인스턴스를 생성한다. 이 method를 여러번 사용하여도 매번 인스턴스가 새로 생성되어 heap 메모리에 올라가는 것이 아니라, 처음 호출시 단 한번만 메모리에 올라간 후 계속해서 그 인스턴스를 사용한다. 예제 학습 package Singleton; public class Singleton { //static method를 통해 접근해야 하기 때문에 인스턴스를 담을 변수를 static 변수로 선언한다 private stati.. 2021. 3. 8.
[디자인패턴]팩토리 메소드 패턴(Factory Method Pattern) -디자인 패턴 중 인스턴스 생성 여부를 팩토리 클래스에서 결정하는 팩토리 메소드 패턴을 알아본다. 팩토리 메소드 패턴이란? 인스턴스 생성을 팩토리 클래스라는 인스턴스 생성 전용 클래스를 만들어 필요에 맞게 인스턴스를 생성하는 방식이다. 인스턴스를 사용하는 클라이언트 및 어플리케이션 쪽에서 직접 생성하는 것이 아니라, 인스턴스를 생성하는 구체적인 클래스를 이용하여 따로 생성하는 것이다. 이렇게 하면 인스턴스 생성에 대한 내용이 바뀌더라도 팩토리 클래스만 수정하면 되기 때문에 객체지향적으로 설계할 수 있고 클래스 간의 결합도가 낮아져서 유지보수에도 효율적이다. 예제 내용 예제는 나이에 따른 처방 시스템을 변경하는 예제이다. 나이에 따라 baby, children, adult, oldman 타입으로 구분하여 .. 2021. 3. 7.
[디자인패턴]템플릿 메소드 패턴(Template Method Pattern) -디자인패턴 중 템플릿 메소드 패턴을 알아본다. 템플릿 메소드 패턴이란? 다른 디자인패턴에 비해 비교적 간단한 패턴 같다. 참고한 YABOONG님 블로그에 소개된 GOF 정의를 소개하자면, Defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure. 라고 정의되어 있다. 슈퍼클래스의 한 메소드에 알고리즘 뼈대를 정의하고 서브클래스에 몇단계들을 맡긴다. 템플릿 메소드(뼈대를 정의한 메소드)는 서브클래스가 알고리즘 .. 2021. 3. 3.