본문 바로가기
반응형

Spring23

[SpringBoot] DI 생성자 주입 생성자 주입 전 OrderServiceImpl.java public class OrderServiceImpl implements OrderService{ MemberRepository memberRepository = new MemoryMemberRepository();// DIP 위반! @Override public Order createOrder(Long memberId) { Member orderMember = memberRepository.findById(memberId); ... } } OrderServiceImpl이 MemberRepository(인터페이스) 뿐만 아니라 구현체인 MemoryMemberRepository에도 의존하고 있습니다. 만약 구현체를 MemoryMemberReposito.. 2023. 10. 26.
[SpringBoot] 프로젝트 빌드 및 실행 빌드 프로젝트 디렉토리를 보면 이렇습니다. 저는 프로젝트에서 바로 터미널에서 작업했습니다. ./gradlew build 위 명령어로 프로젝트를 빌드합니다. 그럼 프로젝트 안에 build라는 폴더가 새로 생겼습니다. cd build/libs 새로 생긴 build디렉토리 안의 libs 디렉토리로 이동합니다. SNAPSHOT.jar 파일이 생성되어 있는데, 이 파일로 실행시키겠습니다. SNAPSHOT -plain.jar를 실행하면 no main manifest attrubute, in ... 에러가 발생합니다. build폴더 지우고 재 빌드 ./gradlew clean 빌드가 잘 안됐다면 clean 명령어를 사용하면 build폴더가 삭제됩니다. ./gradlew clean build clean과 build를 .. 2023. 10. 17.
[SpringBoot/Thymeleaf] ajax 회원가입 중복체크 2 register.html data로 넘어갈 param을 늘리고 세부 조건을 추가했다 세개의 param을 합친 return값을 구분자로 나누어 조건을 추가했다 domain @NotBlank(message = "이름은 필수 입력 값입니다.") private String name; @NotBlank(message = "비밀번호는 필수 입력 값입니다.") private String password; @Pattern(regexp = "^(?:\\w+\\.?)*\\w+@(?:\\w+\\.)+\\w+$", message = "이메일 형식이 올바르지 않습니다.") @NotBlank(message = "이메일은 필수 입력 값입니다.") private String email; @Pattern(regexp = "^[ㄱ-ㅎ가.. 2022. 6. 28.
[SpringBoot/Thymeleaf] ajax 회원가입 중복체크 (Spring Data JPA) register.html oninput으로 script의 함수를 설정해서 입력을 받으면 즉시 DB에서 비교할 수 있다. id값이 name인 input에 작성한 값을 ajax로 /account/check의 경로로 보낸다(Controller) 그리고 그에 따라 적당한 css와 html을 설정해줬다 Controller @ResponseBody @GetMapping("/check") public int idCheck(@RequestParam String name){ int cnt = userService.idCheck(name); return cnt; } Controller로 요청이오면 파라미터로 넘어온 name을 idCheck함수에 넣고 cnt를 리턴한다 Service public int idCheck(Str.. 2022. 6. 28.
[SpringBoot/Thymleaf] validation implementation 'org.springframework.boot:spring-boot-starter-validation' bulid.gradle에 validation 의존성 추가한다 어노테이션 기능 어노테이션 설명 @Null null만 허용 @NotNull 빈 문자열(""), 공백(" ")은 허용하되, Null은 허용하지 않음 @NotEmpty 공백(" ")은 허용하되, Null과 빈 문자열("")은 허용하지 않음 @NotBlank null, 빈 문자열(""), 공백(" ") 모두 허용하지 않음 @Email 이메일 형식을 검사한다. 단, 빈 문자열("")의 경우엔 통과 시킨다. ( @Pattern을 통한 정규식 검사를 더 많이 사용 @Pattern(regexp = ) 정규식 검사할 때 사용 @S.. 2022. 6. 28.
[SpringBoot/Thymeleaf] 외부경로로 img 업로드, 불러오기 import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class SpringConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler( "/.. 2022. 6. 23.
[SpringBoot/SpringSecurity] https://spring.io/guides/gs/securing-web/ Securing a Web Application this guide is designed to get you productive as quickly as possible and using the latest Spring project releases and techniques as recommended by the Spring team spring.io 위를 참고 implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.security:spring-security-test' https://www.b.. 2022. 6. 22.
[SpringBoot/IntelliJ] Spring Data JPA 페이징 public interface SpringDataJpaRepository extends JpaRepository { } Jparepository를 상속하는 respository가 있다 @GetMapping("/mainProductBoard") public String list(Model model){ List mainBoardList = springDataJpaRepository.findAll(); model.addAttribute("mainproducts",mainBoardList); return "boards/board"; } 기존의 findAll()로 모든 list를 가져와서 총 건수 : 받아온 mainproducts의 size를 출력해보면 14개가 나온다 https://docs.spring.io/.. 2022. 4. 18.
[SpringBoot/IntelliJ] Spring Data JPA 게시판 조회수 업데이트 , java lang IllegalStateException For queries with named parameters you need to use provide names for method parameters Use Param for query method parameters or when on Java 8 use th.. 구글링을 통해 찾아본결과 많은 예제가 SpringDataJPA여서 이걸 사용해봤다 Repository public interface SpringDataJpaMemberRepository extends JpaRepository { @Modifying @Query("update MainBoard m set m.mainProductHit = m.mainProductHit + 1 where m.mainProductId = :id") int updateCount(@Param("id") int id); } Service private final SpringDataJpaMemberRepository springDataJpaMemberRepository; public MainBoardService(MainBoardRe.. 2022. 4. 15.
[SpringBoot/IntelliJ] Mysql연동 runtimeOnly 'mysql:mysql-connector-java' builder.gadle에 종속성을 추가한다 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' JPA도 추가한다 @Entity @Table(name="mainproduct") public class MainBoard { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) // PK @Column(name="mainProductId") private int mainProductId; @Column(name = "mainProductTitle") private String mainProductTitle; @Col.. 2022. 4. 14.
[SpringBoot/IntelliJ] Thymeleaf URL표현(th:href) Absolute URL 작성한 url로 직접 이동 Context-relative URL resources / mainProductBoard / Detail 호출 특정 값도 추가할 수 있다 Adding Parameter URL http://localhost:8082/mainProductBoard/Details?id=1 이런식으로 파라미터를 만드는 것이다 이런식으로 위처럼 서버값을 이용하여 만들 수 있다 2022. 4. 14.
[SpringBoot/IntelliJ] MVC구조 ( 게시판 예제 ) 웹 애플리케이션 계층 구조 @Controller : 웹 MVC의 컨트롤러 역할 @Controller public class HomeController { private final MainBoardService mainBoardService; @Autowired public HomeController(MainBoardService mainBoardService) { this.mainBoardService = mainBoardService; } @GetMapping("/mainProductBoard") public String list(Model model){ List mainBoardList = mainBoardService.mainBoard(); model.addAttribute("mainproducts.. 2022. 4. 14.
[Spring Boot/IntelliJ] ResponseBody to JSON static class Hello{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } @GetMapping("api") @ResponseBody public Hello helloApi(@RequestParam("name") String name){ Hello hello = new Hello(); hello.setName(name); return hello; //객체면 자동으로 JSON 방식으로 } @ResponseBody HTTP의 BODY에 문자 내용을 직접 반환 ( view를 거치지않고 문자가 그대로 전달 ) viewResolver 대신에 .. 2022. 4. 13.
[Spring Boot/IntelliJ] Spring MVC Welcome Page 기능 스프링 부트가 제공하는 기능 static/index.html 을 작성하면 Welcome page 기능을 제공 처음 SpringBoot를 다운로드 받을때 추가한 dependencies에 thymeleaf가 있다 templates -> mvc-template) hello! empty mvc-template.html이다 주소창에 localhost:포트번호와 mvc?name=입력할단어▶ 이렇게 하면 mvc-template.html로 넘어와 위처럼 p태그 th:text에 hello + 입력한 값이 화면에 표시된다 웹 브라우저 ▼ localhost:8082/mvc?name= ▼ 톰켓 서버 ▼ (스프링 컨테이너) HelloController return mvc-template model(.. 2022. 4. 13.
[Spring Boot/IntelliJ] SpringBoot 시작 https://start.spring.io/ 여기서 생성한다 Gradle Project와 Java SNAPSHOT인 2.6.7버전으로 선택한다 Java11버전은 오라클에서 받았다 처음 다운로드 해서 사용할 Dependencies는 위에 두개를 ADD 해준다 포트 변경은 맨 위 Run -> Edit Configurations에서 위에 -Dserver.port = 번호를 바꾸면 된다. 그리고 Setting에서 gradle Build and run using과 Run test using을 Gradle(Default) -> InteliJ IDEA로 바꿔서 실행할때 Gradle로 실행하지않게 하면 더 빨라진다고 한다. 2022. 4. 13.
Spring - mysql 연동 환경설정 ●Web.xml contextConfigLocation /WEB-INF/spring/root-context.xml org.springframework.web.context.ContextLoaderListener appServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/appServlet/servlet-context.xml 1 appServlet *.do encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /* Spring MVC.. 2021. 5. 24.
반응형