본문 바로가기

JAVA/Spring

(16)
스프링의 역사 공부를 시작한지 6개월이 조금 넘었지만 벌써 취업을 하게 됐다. 스스로 부족한 점이 많다고 느껴져서 잘 할 수 있을지 걱정도 되고 설레이기도 하다. 스프링의 탄생 초기의 기업들은 자바의 표준 기술로 Enterprise Java Bean을 사용했다. EJB는 트랜잭션, 분산기술, Entity Bean (ORM)등 기술을 지원하여 많은 기업들이 사용하였다. 하지만 비싸고, 어렵고, 복잡하고, 느린 단점이 있었다. EJB의 단점이 너무 심한 나머지 초기의 순수자바(POJO)를 사용하자는 이야기 까지 나왔다. 실무 개발자들이 EJB를 대신 할 오픈소스를 만들다.(Rod Johnson, Gavin King) Rod Johnson은 당시의 EJB를 비판하며 나중에 스프링을 만들어 냈고 Gavin King는 EJB의..
[Spring] JUnit 단위테스트 요령 개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드, 웹 환경에서는 컨트롤러를 통해서 해당 기능을 실행할 수 있다. 이러한 방법은 준비 실행 과정이 너무 오래걸리고, 반복 실행하기 어렵고, 여러 테스트를 한번에 실행하기 어려운 단점이 있다. 그렇기 때문에 자바는 JUnit이라는 프레임 워크로 테스트를 실행해서 이러한 문제를 해결한다. public class MemoryMemberRepository implements MemberRepository { private static Map store = new HashMap(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++s..
[Spring] Gradle build 중 JDK Version 문제 해결 김영한님의 스프링 인강을 보고 따라하는데 명령 프롬프트에서 gradlew build 명령어를 입력하면 계속 저 오류가 떴다. 내용은 즉 Java11로 빌드해야하는데 지금 세팅이 JDK 8에 물려있다고 하는거 같다. 구글에 검색해서 블로그부터 Q&A사이트 , Gradle doc 등등 찾아봐도 해결되지 않았다. 이클립스에서 인텔리J로 갈아타보고, 환경변수 세팅, 레지스토리 세팅, 자바 컨피그 세팅, IDE 세팅, JAVA 재설치 등등 할 수 있는 모든걸 다했는데도 안고쳐졌다. 최후의 방법으로 그냥 기존에 사용하던 Java1.8을 싹다 지워주었다. 그랬더니 해결됐다. 덕분에 오늘 반나절을 날려보냈다. 올바른 해결방법은 아닌 것 같아, 기존의 프로젝트들의연동이나 설정이 어떻게 꼬일지는 모르겠지만 일단 해결됐으니..
[Spring] 'POST' not supported 에러 Spring으로 연습용 게시판을 구현하는 프로젝트를 작업하다가 댓글 작성 기능 테스트 중 아래와 같은 에러를 만났다. 컨트롤러와 View단에서 코드를 잘못 짜서 생긴 오류 같은데 아무리 살펴봐도 데이터를 주고받는 부분에서는 잘못된 부분을 못 찾았다. 긴 시간 삽질 끝에 문제를 해결했다. 넣은 기억도 안나는 post 호출 코드 한 줄이 엉뚱한데 들어가 있다. 단순한 구문 오류였다. 해당 부분을 지워주니까 댓글이 잘 작성된다. 오류중의 대부분은 단순 오타나 구문 오류 같은 실수인 거 같다. 에러가 났을 때 이를 상기하는 습관을 들여놓으면 더 빠르게 해결할 수 있을 것 같다. (나머지 에러의 주범은 메이븐..) 위와 같은 HTTP Method 에러가 발생 했을 때는 view와 controller 사이에서 전송..
[Spring] DI를 사용하는 이유 종속성 때문에? 그걸 해결하기 위해 인터페이스와 추상화가 있는게 아닌가 → 기존의 자바 프로그래밍 방식은 코드에 의존성이 강하다. // Programmer.java class Programmer { private Coffee coffee; public Programmer() { this.coffee = new Coffee(); } public startProgramming() { this.coffee.drink(); // 일단 마시고 시작하자 ... } } 위 startProgramming 메소드를 호출하기 위해선 Coffee 클래스를 사용하여야 한다. 이 때 Coffee 클래스가 수정되면 Programmer 클래스도 수정되어야 한다. 즉 결합도(coupling)가 높다. 이점은? Unit Test가 용..
[Spring] 스프링이란? 스프링은 스프링 애플리케이션 컨텍스트라는 컨테이너에서 컴포넌트를 생성, 관리한다. (컴포넌트 : 애플리케이션을 구성하는 단위) 컴포넌트, 또는 빈은 컨텍스트 내부에서 어우러져 애플리케이션을 만든다. 빈의 상호 연결은 의존성 주입(Dependency Injection, DI) 패턴으로 수행된다. 즉, 의존(사용)하는 다른 빈의 생성과 관리를 자체적으로 하는 대신 컨테이너가 해주며, 이 컨테이너는 모든 컴포넌트를 생성, 관리, 컴포넌트가 필요한 빈에 주입(연결)한다. (생성자 인자, 속성 접근자 메서드를 통해 처리됨) 예를 들어 재고 서비스와 제품 서비스 컴포넌트가 있다고 하면, 제품 서비스는 제품의 완전한 정보 제공을 위해 재고 서비스에 의존한다. (컨테이너 안에서) 컨테이너 외에도 웹 프레임워크, 저장 ..
[Spring] 관점지향프로그래밍 개요(AOP) 서론 java에는 프로그램의 실행 흐름에 관여(공통프로세스)하는 방법이 3가지 Filter, Interceptor, AOP가 있다. 필터와 인터셉트는 서블릿 단위에서 사용되는 기능이며 AOP는 OOP(객체지향설계)를 보완하기 위해 나온 기능이다. AOP 개요 하나의 소프트웨어를 객체지향으로 설계했다면 각 기능들에는 공통되는 로직이 있을것이다. 이러한 로직(공통 관심사라고 표현하던데 왜 그렇게 이해하기 어려운 단어을 쓸까) 을 분리하는 개념이다. 위 그림이 객체지향프로그래밍으로 설계 되었다면 각 서비스(이체, 출금, 계산)가 프로그래밍 되어 있고 각 서비스의 기능동작을 위한 로깅, 보안, 트랜잭션 코드가 구현되어있을것이다. 이 때 실질적으로 프로그래밍의 기능을 구현하는 서비스를 핵심 관심사라고 하며 그 기..
[Spring] Mybatis 연동절차 1. pom.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 org.mybatis mybatis ${mybatis-version} org.mybatis mybatis-spring 1.3.2 Colored by Color Scripter cs maven 원격 저장소(remote repo) 사이트(https://mvnrepository.com/)에서 maven 라이브러리 의존성 정보를 적용 단, 버전 어울림을 생각하여 선정하는 것이 바람함. 2. root-context.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Colored by Color Scripter..