전체 글 372

DispatcherServelet

중앙에 위치한 DispatcherServelet이 모든 연결을 담당 브라우저로부터 요청이 들어오면 HandleMapping이라는 빈 객체에게 컨트롤러 검색을 요청한다(경로를 이용해서) @Controller, Controller 인터페이스, HttpRequestHandler 인터페이스를 동일한 방식으로 처리하기위해 중간에 HandlerAdapter를 사용한다. Mapping에게 찾고, Adapter가 실행 - Adapter는 컨트롤러의 메서드를 호출해서 요청을 처리, 결과를 DispatcherServelet에 리턴한다.이 때 M&V라는 객체로 반환되어  리턴된다. M&V로 받았으면 DS은 ViewResolver에게 위임, View 객체를 찾거나 생성해서 리턴한다. - 클라이언트 요청을 처리하기 위해 사용되..

JDBC Template / 트랜잭션

1.기존 JDBC의 보일러플레이트 코드템플릿 메서드 + 전략 패턴 -> JDBC template 2.디펜던시 추가spring-jdbc : spring-tx 포함tomcat-jdbc : 커넥션 풀mysql-connecter-java *톰캣, 히카리CP도 DB 커넥션 풀 제공 3. ddl.sql 내부유저 / create DB / 권한 / 테이블 만들기 4. 워크벤치에서 시험용 데이터 생성 - 4.MemberDao가 JDBC template을 가진다.JDBC template은 DataSource를 인자로 생성하는데, DS는 AppCtx에서 D/I해준다 5. AppCtx 2개 빈 추가- 톰캣 DS 생성 후 set으로 mysql 연결정보 + 풀 정보 셋업- memberDao에 DS 조립 - 7. MemberDao..

AOP복습

1.spring-context 기본 모듈에 AOP 기능은 있으나,어노테이션 추가기능 사용 위해 aspectjweaver 디펜던시 추가 2.delegate 패턴- interface Calculator- class implements Calculater : field + 세터 + @Override(앞뒤로 추가기능) - 3.프록시 : 실행은 다른 객체에 위임하고 부가 기능을 제공하는 객체 4.대상 객체 : 실제 핵심 기능을 실행하는 객체 * 프록시보다 데코레이터 - 5.AOP (관점보다는 기능으로 해석)핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적용하는 것 6.3가지 시점AspectJ : 컴파일 시점AspectJ : 클래스 로딩 시점 : 바이트코드에 삽입스프링 제공 : 런타임에 프록시 객체 생성  7...

빈 라이프사이클

1. ctx가 생성되고 소멸될때 빈도 딸려간다. 2. 컨테이너 생성시 -> "빈 생성 / 의존 설정 / 초기화 "  3. 컨테이너 소멸시 -> "빈 소멸" - 4. 빈 초기화 및 소멸시 지정 메서드 호출 5. 인터페이스 2가지 및 그에 딸린 추상메서드  6. InitializingBean -> afterPropertiesSet() / DisposableBean -> destory() 7. 사용할 클래스에서 두개 implement후 8. 사용 기능 앞뒤로 메서드 커스텀해주기 9. ctx 설정클래스는 별도로 건드리지 않아도 된다. - 10. 메인에서ctx 생성 -> ctx.getBean()얻기 -> Bean 메소드 사용 -> ctx.close();설정된 커스텀 메서드 실행된다 - 11. 외부에서 제공받은 클..

스프링 DI 복습

1. 어셈블러 개념 : Ctx가 Bean을 자동으로 조립해준다/ 2. 사용하는 메인단 / AppCtx 설정클래스 / 빈이 되는 개별 기능 클래스들 3.@Config가 붙은AppCtx 클래스에서 조립 main에서 Ctx 생성해서 사용 4. 설정 파일 역시 클래스로 관리된다. 5. 일반 설정파일에는 memberDao  6. 사용하는 cngpwclass에서 private MemberDao memberDao는 항상 존재 7. ctx파일에서 setMemberDao를 안넣어줘도 사용클래스에서 @Autowired 넣어도 가능 8. Autowired는 사용클래스 내의 setter 메서드에 넣어도 됨 9. 결과적으로 ctx 설정클래스에 생성자든 세터든 명시 필요 x 10. 설정 클래스를 그대로 사용하지 않고 복사해서 사..

무중단 배포(nginx)

1.nginx -> springboot 프록시 테스트ec2에 nginx 설치ngingx config에 80포트 -> 8081 스프링부트 포트로 전달profile API 추가 2. 8081 8082 API 만들기profile API 테스트SecurityConfig test -> antmatcher가 없으니 별도 진행xnginx에 로케이션 변수 넣어주기3. 배포 스크립트 작성profile.shstop.shstart.shhealth.shswitch.shpom.xml에 자동 버전 변경 추가4. 테스트  sudo service nginx start-> ec2에서는 정상 실행되지만 아무것도 안 뜬다-> ec2 인바운드 규칙 추가-> nginx는 기본 포트가 80도메인이므로 포트번호 안쓰고 접속 -> 엔진엑스 메인..

Travis CI + S3 + Codeplay

1. Travic CI 가입(서드파티 활성화) 2. travis.yml 추가 -> 깃헙과 트래비스 연동깃헙 푸쉬시 travis 반응 확인3. travis- AWS s3 연동IAM 발급 (액세스 키 별도생성)travis ci에 키 등록(.travis.yml에서 사용가능)S3 버킷 생성.travis.yml에 버킷 추가(git push -> travis CI) -> "s3"에 zip 생성되는 흐름 확인4. CODEDEPLOY EC2가 받을 수 있게 IAM 역할 추가ec2 터미널에서 codedeploy 에이전트 설치codedeploy -> ec2 권한codedeploy, 그룹 생성 + ec2태그 매치 5. 조립appspec.yml 에 ec2 경로 설정.travis.yml에 codedeploy provider추가..

EC2 배포

메인서브1. EC2에 git 설치maven / java / javac 추가 설치 2. 배포 스크립트 만들기gradle -> maven 컴파일 명령어 변경nohup 오류 처리java 환경변수 / sudo us 권한git pull부터 전부 하지말고 디버깅하듯이 한줄로 배포 검증하기  3. 스프링부트 프로젝트로 RDS 접근  - 1. 배포 스크립트 작성책에서 gradle -> maven은 빌드가 아닌 package임 주의 원본 참조 : https://velog.io/@shawnhansh/AWS-EC2%EC%97%90-SpringBoot-gradle-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8jar-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0#!/bin/bashREPO..

터미널 명령어

(공통)mkdir ~/app/cd ~/apprm엘엘 -> 현재 디렉토리 chmod +x (파일) -> 퍼미션 부여 (ec2에 깃)sudo yum install gitgit —versiongit clone (깃헙 https 리포지토리 주소)git pull (vim)vim ~/ -> 자동 만들어짐파일 내부 s -> 편집 모드esc -> 보기 모드:wq -> 저장 후 빠져나옴:q -> 그냥 빠져나옴ec2에 java (maven)sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.reposudo sed -i s/\$releasever/6/g..

EC2 RDS 연결

1. RDS 인스턴스 생성 EC2와는 연결 바로 하지 않고 나중에 하기  2. 파라미터 셋업  편집에서 time_zone 맙추기  슬래쉬로 해야 완성  Character 6개 : utf8mb4 -> 이모지 쓸수있게 변경collation도 변경해줘야횜 파라미터 그룹 후 별도 적용해야함 수정 -    https://repost.aws/ko/questions/QU7w-RT1AHRr6JiZPrsteGHQ/rds-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-time-zone-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-%EB%B3%80%EA%B2%BD%EB%B6%88%EA%B0%80 https://superuser.com/questions/635269/cant-find-..