소개
교육자
전: 우아한형제들 기술이사, 카카오, SK플래닛
강의
전체18로드맵
전체3수강평
- 강의도 강의이지만 pdf파일로 된 교재도 가독성이 좋아서 강의 듣고 한번 복습용으로 훑으면 굉장히 효율적인것 같습니다 감사합니다!!
blackjack_96
2024.04.19
0
- 좋은 강의 감사해용!!
Aurora
2024.04.18
0
게시글
질문&답변
2024.04.16
gradle 추가 오류
안녕하세요. gump님 기존 설정에서 lombok 설정 추가 시작, 끝 부분만 추가 해주시면 됩니다. 다음 내용을 복사해서 붙이셔도 됩니다 🙂 plugins { id 'java' id 'org.springframework.boot' version '3.2.4' id 'io.spring.dependency-management' version '1.1.4' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } //lombok 설정 추가 시작 configurations { compileOnly { extendsFrom annotationProcessor } } //lombok 설정 추가 끝 repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' //lombok 라이브러리 추가 시작 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //lombok 라이브러리 추가 끝 testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } } tasks.named('test') { useJUnitPlatform() } 감사합니다.
- 0
- 1
- 33
질문&답변
2024.04.16
강의 26분 부터 진행이 안도고 500 에러 발생합니다
안녕하세요. 양치잘하기님 현재 2가지 문제가 있습니다. 다음 코드를 보면 uploadFIleName으로 되어 있는데, 이것을 읽어들이는 view 에서는 getUploadFIleName()으로 잘못 되어 있습니다. FIle -> File로 대소문자를 다시 정리해주세요. package hello.upload.domain; import lombok.Data; @Data public class UploadFile { private String uploadFIleName; private String storeFileName; public UploadFile(String uploadFIleName, String storeFileName) { this.uploadFIleName = uploadFIleName; this.storeFileName = storeFileName; } } item-view.html 상품 조회 상품명: 상품명 첨부파일: (사진) 이미지가 보이지 않는 문제는 ItemController에 /images를 처리하는 다음과 같은 메서드가 없습니다. @ResponseBody @GetMapping("/images/{filename}") public Resource downloadImage(@PathVariable String filename) throws MalformedURLException { return new UrlResource("file:" + fileStore.getFullPath(filename)); } 강의 내용과 메뉴얼 그리고 소스 코드를 참고해서 추가해주세요. 참고: 강의를 진행하다보면 코드가 실행되지 않을 경우가 있는데요. 이럴 때는 제공해드린 강의 소스 코드를 참고해주세요. 제가 추천하는 방법은 강의 소스코드에 있는 파일을 하나씩 복사해서 내 프로젝트에 붙여넣기 하면서 실행해보는 것입니다. 그러면 문제가 되는 파일을 빠르게 찾을 수 있습니다. 강의 소스 코드 링크 https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2&unitId=83250&tab=curriculum 감사합니다.
- 0
- 1
- 74
질문&답변
2024.04.16
concrete proxy controller에는 requestmapping이 없지 않나요?
안녕하세요. blackjack_96님 @Inherited 적용하지 않으면 자바 문법상 부모 클래스의 애노테이션을 자식 클래스가 상속 받지 않습니다. 스프링은 내부에서 여러가지 설정을 할 때 부모 클래스에 있는 애노테이션을 읽어서 처리하는 장치들이 되어 있습니다. 이 부분은 자바 문법상 되는 것은 아니고 스프링이 특별하게 처리해주는 것으로 이해하시면 됩니다. 감사합니다.
- 0
- 1
- 32
질문&답변
2024.04.16
CGLIB 와 클래스 로딩시점의 차이..
안녕하세요. 리어스리님 CGLIB와 AspectJ에 대해 혼동이 있으신 것 같습니다. 먼저, 이 두 기술은 Java에서 AOP(Aspect-Oriented Programming)를 구현하기 위한 다른 접근 방식을 제공합니다. 두 기술 모두 바이트 코드 조작을 통해 작동하지만, 그 방식과 적용 시점에 차이가 있습니다. CGLIB CGLIB (Code Generation Library)는 런타임에 프록시를 생성하여 바이트 코드를 조작합니다. CGLIB는 주로 타겟 객체의 서브 클래스를 동적으로 생성하고, 이를 통해 메서드 호출을 가로채 AOP를 구현합니다. 이렇게 생성된 서브 클래스는 원래 클래스의 프록시 역할을 하며, AOP의 관점에서 원하는 기능(로깅, 트랜잭션 관리 등)을 추가할 수 있습니다. CGLIB가 프록시를 사용하는 이유는 바이트 코드 조작 자체만으로는 원본 객체의 행동을 변경하거나 확장하기 어렵기 때문입니다. 프록시를 통해 원본 객체를 감싸고, 이 프록시에서 추가적인 기능을 실행한 후 실제 객체의 메서드를 호출하게 되므로, 사용자는 원본 객체를 수정하지 않고도 원하는 기능을 적용할 수 있습니다. AspectJ AspectJ는 컴파일 시간(또는 클래스 로딩 시간)에 바이트 코드를 조작합니다. AspectJ는 특히 더 강력한 AOP 기능을 제공하며, 이는 컴파일 시점에 소스 코드 또는 클래스 파일에 직접적인 바이트 코드 조작을 통해 이루어집니다. AspectJ는 프록시를 사용하지 않고 바로 바이트 코드를 조작하여, 원하는 AOP 기능을 클래스에 직접 삽입합니다. 이로 인해 실행 시에 추가적인 객체 생성이나 호출이 필요 없으며, 성능상의 이점을 가질 수 있습니다. CGLIB와 AspectJ의 차이점 조작 시점 : CGLIB는 런타임에, AspectJ는 컴파일 시간 또는 클래스 로딩 시에 조작합니다. 프록시 사용 : CGLIB는 프록시를 사용하여 메서드 호출을 가로챈다. AspectJ는 프록시 없이 직접 클래스의 바이트 코드를 변경합니다. 성능 : AspectJ는 컴파일 시간에 바이트 코드를 조작하기 때문에, 런타임에 성능 이점을 가질 수 있습니다. 반면, CGLIB는 런타임에 프록시 객체를 생성하므로, 이에 따른 오버헤드가 발생할 수 있습니다. 바이트 코드를 조작하는 기술을 사용하더라도, CGLIB가 프록시를 사용하는 이유는 런타임에 유연성을 제공하고, 원본 코드를 변경하지 않고도 동적으로 기능을 추가할 수 있기 때문입니다. ( 실무에서 AspectJ를 적용하려면 여러가지 제약이 있기 때문에 사실 도입이 쉽지 않습니다. 대신에 CGLIB는 바로 도입할 수 있습니다. ) 감사합니다.
- 0
- 1
- 42
질문&답변
2024.04.15
오타 - 불변객체 문제풀이 문제 설명, 클래스 이름 오타
생각하는자님 고맙습니다 🙂 다음 버전에 패치할게요 🙂
- 0
- 1
- 71