목록백엔드 (25)
프로그래밍 끄적끄적
* annotation으로 스프링 빈 등록하기 @Controller annotaion을 명시하면 해당 컨트롤러 객체를 만들어서 스프링 컨테이너가 관리한다. 굳이 컨트롤러마다 만들지 않아도 되는 객체(ex.서비스)는 스프링 컨테이너에 하나만 저장해놓고 공유할 수 있다. @Autowired annotation을 통해 이러한 구현이 가능한데, 스프링이 해당 객체를 인지하기 위해(=스프링 빈으로 등록하기 위해) @Controller, @Service, @Repository annotation을 사용해야 한다. 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI(Dependency Injection)이라고 한다. @..
테스트는 애플리케이션 빌드에 포함되지 않으므로 한글로 작성해도 된다. 테스트를 작성할 때 //given //when //then으로 나누어서 짜는 습관을 들이자. 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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 // 테스트 생성 단축키: ctrl + shift + T // 이전 실행 반복 단축키: shift + f10 class MemberServiceTest { MemberService memberService; MemoryMe..
서비스는 핵심 비즈니스 로직을 구현하는 부분으로 리포지토리보다 조금 더 비즈니스적인 용어로 작성한다. 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 public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); /** * 회원 가입 */ public Long join(Member member) { //메소드 추출 단축키: ctrl + alt + M //같은 이름이 있는 중복 회원 X validateDuplicateMember(member); //중복 회원 ..
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 public class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); //@AfterEach: @Test 가 끝날 때마다 진행 @AfterEach public void afterEach() { repository.clearStore(); //테스트가 끝날 때마다 저장소를 지움 } @Test public ..
* 웹 애플리케이션 계층 구조 일반적인 웹 애플리케이션 계층 구조는 아래의 그림과 같다. 서비스는 핵심 비즈니스 로직을 구현하는 부분이며, 리포지토리는 데이터베이스에 접근하는 부분으로 도메인 객체를 DB에 저장하고 관리한다. 도메인은 주로 데이터베이스에 저장하고 관리되는 비즈니스 도메인 객체이다. * 회원 관리 예제의 비즈니스 요구사항 정리 - 데이터: 회원ID, 이름 - 기능: 회원 등록, 조회 - 아직 데이터 저장소가 선정되지 않음 * 도메인 회원ID와 이름을 등록하기 위한 객체로 Member를 작성한다. (getter, setter 생략) 1 2 3 4 5 6 public class Member { private Long id; private String name; } cs * 리포지토리 회원 관리..
* 정적 컨텐츠 : 파일을 그냥 그대로 웹 브라우저에 보여준다. : url은 static 이후의 파일경로를 그대로 작성하면 된다. (ex. localhost:8080/hello.html) ※ url이 들어오면 먼저 1) 관련된 컨트롤러가 있는지 찾고, 없으면 2) static에서 보여줄 수 있는 파일이 있는지 찾는다. 만약 1)에 의해 찾은 파일들이라면 템플릿 엔진에 의해 가공된 후에 웹 브라우저에게 넘겨준다. * MVC와 템플릿 엔진 : 서버에서 html을 바꿔서 보여준다. ◎ MVC (Model, View, Controller) Model은 데이터와 비즈니스 로직을 관리한다. View는 레이아웃과 화면을 처리한다. (많은걸 하려고 하지 말고 보여주는 역할에 충실히 하자!) Controller는 명령을..
* Welcome page (정적 페이지) src/main/resources/static/index.html 스프링 부트는 시작 페이지를 보여주기 위해 먼저 static에서 index.html 파일을 찾는다. 발견되지 않으면 templates에서 index.html 파일을 찾는다. * Thymeleaf 템플릿 엔진 1 2 3 4 5 6 7 8 9 @Controller public class HelloController { @GetMapping("hello") public String hello(Model model) { model.addAttribute("data", "hello!!"); return "hello"; } } Colored by Color Scripter cs Line 1) @Control..
이러한 에러는 8080 포트를 이미 다른 프로세스/프로그램이 점유 중이어서 발생한다. 따라서 해당 프로세스를 종료시켜주면 해결된다. Windows 기준으로, >> netstat -ano | findstr 8080 : 포트번호를 사용 중인 pid를 찾아낸다. >> taskkill /F /pid [pid] : 찾아낸 pid를 종료시킨다. 참고자료 https://7942yongdae.tistory.com/35 Error - Port 8080 was already in use Port 8080 was already in use 에러와 원인과 해결 방법 메시지 *************************** APPLICATION FAILED TO START *************************** De..