목록Programing/Spring Boot (37)
월루를 꿈꾸는 대학생

객체 지향 프로그램 객체들의 모임 .. 객체는 서로 메세지를 통해 협력한다 유연하고 변경이 용이 유연하고 변경이 용이 -> 컴포넌트를 쉽고 유연하게 변경하고 개발가능 - > 다형성 !! 세상을 역할과 구현으로 구분! 역할 = 인터페이스 구분 = 인터페이스 구축한 객체 벤츠 탄 사람이 트럭 탈 수 있지 자동차 바껴도 운전자에게 역할은 안 바뀜 유연하고 변경이 용이 = 내가 자동차 역할을 벤츠에서 덤프트럭으로 바꿔도 운전자는 운전면허만 있으면 가능 자동차 끼리 바뀔때는 새로 운전면허 바뀔 필요 없이 운전가능 운전자는 자동차 인터페이스만 알고 있음 자동차 역할을 만들고 구현을 구분한 것은 운전자를 위해! 운전자 = 클라이언트 운전자는 자동차 내부 몰라도 됨 ... 자동차 역할만 하고 있으면 내부적으로 바껴도 ..

aop aop 필요한 상황 - 메서드의 호출 시간 측정할 때 (초를 밀리세컨드로 바꿀려면 일일이 수정필요) 메서드 앞과 끝에 시간을 측정하고 출력 이런 걸 메서드별로 다 적으려고 하면 답답 public Long join(Member member){ long start = System.currentTimeMillis(); try{ // 같은 이름이 있는 중복 회원 x 만약 해당 이름으로 못 찾은 경우를 대비해서 optional로 감쌈 Optional result = memberRepository.findByName(member.getName()); //ifPresent : result값이 null이 아니라 값이 있으면 동작하는 메서드 // -> 옵셔널로 감싸면 옵셔널 가지고 있는 메서드 사용 가능 // 값..

회원 웹 기능 - 홈화면 추가 - home 화면의 경우 아무것도 없는 '/' 기준 - 우선순위 상 내장 톰켓에서 스프링 컨테이너 안에 매핑된 게 있는 지 확인하고 없으면 리소스에서 찾아서 반환 @Controller public class HomeController { @GetMapping("/") public String home(){ return "home"; } } - 다음과 같이 "/" 로 매핑된 경우 우선순위가 높기 때문에 home이 반환 됨 회원 웹 기능 - 등록 1. /members/new 로 이동시 createMemberForm.html로 이동 2. 해당 html에서 이름 입력후 전송 이름

계층 구조 - 컨트롤러 : 제어역할 - 서비스 : 핵심 로직 - 리포지토리 : 디비 접근 관리 - 도메인 : 비즈니스 도메인 객체 ? : 멤버 , 쿠폰 등 클래스 의존 관계 - 인터페이스로 구현 클래스를 만든다 - 디비 나중에 바꿔끼우기 위해서 인터페이스로 만듦 리포지토리 - 저장소 - 회원 객체를 저장하는 저장소 역할 - 인터페이스에다가 저장 , id로 찾기 , 이름으로 찾기 , 모두 찾기 등의 4가지 메서드를 정의 // 값이 없으면 null이 반환이 되니까 에러 .. 그럴 경우 Optional로 감싸면 에러 안 난다 Optional findById(Long id); // member repositry에서 필요한 기능을 정의 해두고 구현체를 바꿔끼우는 식으로 - 처음 인터페이스를 만들고 그 인터페이스에..

1. 정적 컨텐츠 - 그냥 파일 그대로 웹브라우저 보여줌 - /resources/static 폴더 안에 html 넣어주면 됨 - url에 html파일 넣어주면 정적으로 웹에서 보여줌 흐름 1. hello-static.html 치고 들어감 2. 내장 톰캣에서 요청 받음 3. 스프링 컨테이너에 해당 컨트롤러가 있나 확인 !! 우선순위 4. 컨트롤러가 없으면 /static 폴더 안에서 매칭되는 html 파일이 있나 확인 5. 있으면 반환 2. MVC와 템플릿 엔진 - html을 그냥 주는게 아닌 서버단에서 동적으로 변경하고 줌 - 모델, 뷰 , 컨트롤러 - 첨에는 jsp로 뷰에다가 다 했다가 mvc 스타일로 관심사를 나눠서 코딩을 한다 ! ctrl + p : 옵션을 확인할 수 있다 @GetMapping("he..

자바 버전 11 인텔리제이 세팅 기본 세팅 gradle 은 의존관계를 생각함 spring boot starter web - web만 땡기는게 아니라 web이 필요한 부가적인 의존 패키지들도 같이 땡겨오니까 목록이 많이 보임 밑으로 계속 떙겨 나옴 -> 의존적 나중에 로그 출력할 때 system.out.print 이런거로 남기면 안 됨 로그로 따로 만들어서 써야 나중에 정리도 가능 웰컴 페이지 - resources/static/index.html - index.html이 8080로 들어갔을 때 나오는 웰컴 페이지가 됨 - 모르는 경우엔 직접 찾아서 확인할 필요도 있다 https://docs.spring.io/spring-boot/docs/2.7.7/reference/html/web.html#web Web ..

https://getbootstrap.com/docs/5.2/getting-started/download/ Download Download Bootstrap to get the compiled CSS and JavaScript, source code, or include it with your favorite package managers like npm, RubyGems, and more. getbootstrap.com 부트스트랩 다운로드 bootstrap.min.css 파일을 static 폴더에 넣어두기 해당 부트스트랩 파일을 적용 #temporals.format(날짜객체 ,날짜 포멧) - 날짜 표시를 커스터마이징 부트스트랩 스타일시트에 있는 클래스들을 각 html 요소에다가 넣어주기 표준 html ..
resource 폴더의 하위 static에 스타일 시트 파일을 저장 /*텍스트를 100퍼로 화면 체우고 */ textarea { width:100%; } /*답변 버튼을 위에서 10정도 띄움*/ input[type=submit] { margin-top:10px; } html에 head 태그 안에 넣어두기 static이 스타일시트의 루트폴더 출처 https://wikidocs.net/161396
서비스 왜 사용하는가? 모듈화 - 컨트롤러가 리포지토리 여러개 쓰면서 처리하는 것도 좀 컨트롤러의 역할 부담이 심해짐 - 서비스가 있으면 컨트롤러는 해당 서비스만 쓰면 되니까 간단! 서비스 생성 @RequiredArgsConstructor // 어노테이션으로 서비스 인식 @Service public class QuestionService { private final QuestionRepository questionRepository; public List getList(){ return this.questionRepository.findAll(); } } 컨트롤러 - 리포지토리 대신 서비스로 사용 @RequiredArgsConstructor @Controller public class QuestionCo..
기본 localhost:8080 호출 시 매핑된 url이 없기 때문에 404에러가 발생한다 이를 리다이렉트해서 리스트 화면이 보여지도록 수정 redirect: - url로 리다이렉트 - 완전히 새로운 url 요청임 forward: - url로 포워드 - 기존 요청된 값들을 그대로 유지한 채 url 전환 @GetMapping("/") public String root(){ return "redirect:/question/list"; } 출처 https://wikidocs.net/161354