BackEnd/Spring

다니고 있는 직장에서 CRON 스케줄러를 사용해야 하는 일이 생겼다. 내가 담당하고 있는 사이트 중 메인 페이지에 정기간행물 정보를 노출하는 사이트가 있었는데, '어떠한' 기능 때문에 사이트 최초 접속 시 로딩 시간이 매우 길다는 이슈가 발견됐기 때문이다. 여기에 간행물 개수도 기존에 운영 중이던 7개에서 무려 4개나 늘려 총 11개를 노출해야 했으므로, 대대적인 개편 작업이 필요하게 되었다. (ㅠㅠ 분명 수정 작업이라매요) 해당 사이트의 '어떠한' 기능은 내가 여기에 입사하고 두 달쯤 된 완전 신입 개발자일 때 실무는 이런 곳이구나 ㅠㅠ 하며 피똥 싸며 개발한 기능이었다. 말만 기능이지 사실상 서비스단, 쿼리, JSTL 등 곳곳에 야무지게 삽질한 것의.. 산물이었다. AS-IS 시스템은 아래와 같다. ..
Spring jUnit 테스트 Spring 테스트 환경 구축 spring-test, hamcrest-library, hamcrest-all, mockito-all Dependency 추가 작업 중이던 프로젝트 우클릭 - Build Path - Libraries 이동 - 오른쪽 메뉴에 Add Library 클릭 - jUnit 선택 - jUnit library version : jUnit 5 확인하고 Finish - Apply and Close 마이바티스를 연동해서 사용 중이라면 config.xml 파일에서 mappers 태그 지워주기 스프링 폴더의 root-context.xml 로 이동해서 sqlSessionFactory 에 소스 추가해주기 mybatis 폴더를 src/test/resources 로 복사 ..
Spring MVC Legacy Project 생성하고 구성하기 Eclipse > new > other > Spring > Spring Legacy Project Project name 설정 > Templates 영역 가장 하단에 Spring MVC Project 선택 Specific Setting 할 때 com.xxx.xxx 형식으로 주소를 입력해야하는데 최소한 3Depth 로 구성하는것이 좋다, 세번째 Depth 가 Context Path 로 지정된다 ex) com.heonil.project -> project 가 Context Path -> localhost:9999/project Tomcat 에 올리고 사용 pom.xml 환경설정 java 1.6 > java 1.8 SpringFramework 3..
Spring 첫 프로젝트 만들기 File - new - other 선택 Spring 폴더 찾기 Spring Legacy Project 선택 제일 밑에 Spring MVC Project 선택 프로젝트 이름 입력 Top-level Package 입력 3단계로 이루어진 기본 패키지 (xcode 에서 com.username.www ~~ 쓰는것과 똑같은 원리) Finish 스프링 프로젝트에 적용되어 있는 JRE 버전 바꾸기 프로젝트 폴더 우클릭 Build Path 메뉴 - Configure build path 클릭 왼쪽 사이드 메뉴 중에서 Project Facets 선택 Java 항목에서 1.6 을 1.8 로 변경 선택 Apply 변경 확인은 왼쪽 사이드 메뉴나 프로젝트 우클릭 - Build Path - Libr..
Spring Transaction 속성 @Transactional(readOnly=true, isolation=Isolation.DEFALUT, rollbackFor=Exception.class) propagation 이미 진행 중인 트랜잭션이 존재할 때 새로운 쿼리가 호출 될 경우 어떻게 처리할 지 설정한다 @Transactional(propagation=Propagation.REQUIRED) REQUIRED(기본값) - 진행중인 트랜잭션이 있다면 새로운 쿼리가 트랜잭션에 포함되고 진행중인 트랜잭션이 없다면 새로운 트랜잭션을 생성한다 REQUIRED_NEW - 항상 새로운 트랜잭션을 시작한다 SUPPORT - 이미 시작된 트랜잭션이 있으면 트랜잭션에 포함하고 없으면 트랜잭션 없이 진행한다 NOT_SUP..
스프링 의존성 주입 의존성, Dependency 특정 객체가 작동하기 위해 필요한 외부 객체와의 연결 public class EmpController { // EmpController class는 EmpService 객체에 의존적이다 private EmpService empService = new EmpServiceImpl(); } // EmpController Class 가 작동하기 위해서는 EmpService 객체가 필요하게 된다, // 그러므로 private EmpService empService = new EmpServiceImpl(); 를 선언하는데, // 이때부터 의존관계가 되는 것 의존성 주입, Dependency Injection, DI 객체가 의존성을 직접 발생시키지 않고 외부(스프링)의..
@Autowired 의 바인딩 전략 바인딩 : 실행코드와 정의코드가 연결되는 것 주로 메소드 호출코드와 메소드 정의코드가 연결되는 것을 의미한다 @Autowired 는 객체변수와 스프링 Bean 을 연결하는 것을 뜻한다 (DI, Dependecy Injection) byType 스프링 Bean 의 이름(id)에 상관없이 같은 타입의 Bean 이 한 개만 존재한다면 바인딩한다 같은 타입으로 등록된 Bean 이 두가지 이상 존재한다면 예외처리가 발생한다 NoUniqueBeanDefinitionException byName 같은 타입의 빈이 여러 개 등록되어 있더라도 지정된 이름의 빈을 바인딩 이름이 지정되지 않았다면 스프링 빈의 id와 멤버필드의 이름을 비교해서 바인딩 같은 이름으로 여러 개의 스프링 빈이 ..
AOP, Aspect Oriented Programming 관점 지향 프로그래밍 시스템의 규모와 복잡도가 증가하면서 기능별로 모듈화를 거치더라도 중복되는 코드가 생겨나게 된다 트랜잭션 관리, 로깅처리 등 이러한 코드들을 다시 한번 더 모듈화 해내어 분리하는 것이 AOP 이다 재 모듈화 라고 생각하면 이해가 쉬울 것이다 AOP 용어 Advice PointCut 에서 지정한 JoinPoint 에서 실행되어야 하는 코드 Around Advice : JoinPoint 의 앞과 뒤에서 실행되는 Advice Before Advice : JoinPoint 의 앞에서 실행되는 Advice After return Advice : JoinPoint 메소드 호출이 정상적으로 종료된 뒤에 실행되는 Advice After Th..
Spring Annotation 어노테이션은 자바 1.8 버전부터 지원한다 스프링은 어노테이션을 이용하여 bean과 관련된 정보를 설정할 수 있다 스프링에서 어노테이션을 사용하기 위해 필요한 설정 의존성 관련 어노테이션 태그를 applicationContext.xml 에 등록하면 @Autowired, @Required, @Resource 등을 사용할 수 있다 bean 으로 등록하는 것과 관련된 어노테이션 context:annotation-config + @Component, @Controller, @Service, @Repository 등 @Component : 클래스 위에 선언하며, 해당 클래스를 자동으로 bean으로 등록한다, bean 의 이름은 해당 클래스명이 사용된다 (첫글자는 소문자) @Cont..
Spring Framework 스프링의 특징 자바를 이용한 프로그램 개발 프레임워크 DI (Dependency Injection), 의존성 주입 Spring AOP (Aspect Oriented Programming), 관점 지향 프로그래밍 POJO, Plain Old Java Object IOC (Inversion Of Control), 제어의 반전 스프링 홈페이지 Spring STS Tool Spring Tool Suite STS 버전과 스프링의 버전은 다르다, 문서에 작성 할 때는 분리하여 작성할 것 이클립스에서 Spring Framework 를 개발할 수 있게 해주는 툴 설치방법 두가지 이클립스에 플러그인 형태로 STS 툴을 설치하는 방법 STS Tool 을 다운받아 한번에 설치하는 방법 (이클립..
헌일