안녕하세요, 이 강의를 완강이후 프로젝트를 수행중인 학부생입니다. 로그인 기능 구현과 관련하여 강의 예제 코드를 참고하며 구현하던 중 이해할 수 없는 현상이 발생하여 질문 드립니다. 코드 LoginInterceptor.java package Alchole_free.Cockpybara.interceptor; import Alchole_free.Cockpybara.constant.SessionLoginConst; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @Slf4j //@Component public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); log.info("session = {}", session); if(session==null || session.getAttribute(SessionLoginConst.LOGIN_MEMBER)==null){ log.info("로그인되지 않은 사용자"); response.sendRedirect("/login"); return false; } log.info("정상 요청"); return true; } } WebConfig.java package Alchole_free.Cockpybara.config; import Alchole_free.Cockpybara.interceptor.LoginInterceptor; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; //@Slf4j @Configuration //@RequiredArgsConstructor public class WebConfig implements WebMvcConfigurer { // private final LoginInterceptor loginInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .order(1) .addPathPatterns("/**") .excludePathPatterns("/", "/join", "/login", "/css/**", "/*.ico", "/error"); } } 문제 위와 같이 코드를 구성하고 애플리케이션을 동작시켰는데, 인터셉터가 아예 로그에 남지 않는(생성되지 않는 것으로 보이는) 현상이 발생하였습니다. 관련하여 구글링을 하다보니 인터셉터 클래스를 빈으로 등록해주는 형태가 아니면 동작하지 않을 수 있다고 하여, 빈으로 등록하고 WebConfig 클래스에서 생성자를 통해 주입받는 형태로 구현도 해보았는데 여전히 같은 문제가 발생하더군요. 도대체 어느 부분에서 문제가 발생하는 것인지 파악하기가 힘들어 고민끝에 질문드립니다. 혹시 몰라 아래 빌드, 설정 파일도 첨부합니다. 문제 실행 화면 /hello 로 Controller @GetMapping 메서드를 구현해놓고 요청을 보냈으나 인터셉터 관련 로그가 기록되지 않는 모습입니다. build.gradle plugins { id 'java' id 'org.springframework.boot' version '2.7.13' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'Alchole_free' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' compileOnly 'org.projectlombok:lombok' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //swagger 설정 implementation group:'io.springfox', name:'springfox-swagger2', version:'2.8.0' implementation group:'io.springfox', name:'springfox-swagger-ui', version:'2.8.0' } tasks.named('test') { useJUnitPlatform() } application.properties # DataSource spring.datasource.url=jdbc:mariadb://localhost:3306/cockpybara spring.datasource.username=root spring.datasource.password=cockpybara spring.datasource.driver-class-name=org.mariadb.jdbc.Driver # JPA spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect #show parameter binding logging.level.org.hibernate.type.descriptor.sql=DEBUG logging.level.org.hibernate.SQL=DEBUG
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] cd로 이동 후 gradlew bulid를 실행했을 때 Task 'bulid' not found in root project 'hello-spring'. Some candidates are: 'build'. 라고 에러가 납니다. 환경변수는 어느 답변 중 %JAVA_HOME%\bin으로 하는 것을 확인했습니다.
안녕하세요 타임리프에서 LocalDate 넘기는 방법중에 타임리프에서 format을 하시던데 제가 프론트 코드를 일하면서 못봐서 그런건지는 모르겠는데 json으로 date를 포맷팅 해서 넘겨주는 방식은 본 것 같거든요 혹시 타임리프에서 date를 직접 받아와서 사용 하는 방식중 어느 방식이 더 좋을까요?
# 예제4 w = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21]] with open('./resource/write1.csv', 'w', encoding='UTF-8') as f: print(dir(csv)) # csv 속성 확인 wt = csv.writer(f) #dir 확인 #print(dir(wt)) #타입 확인 #print(type(wt)) for v in w: wt.writerow(v) # writerow : 한 줄 한 줄 작성 # 예제5 with open('./resource/write2.csv', 'w', encoding='UTF-8') as f: fields = ['One', 'Two', 'Three'] wt = csv.DictWriter(f, fieldnames = fields) # DictWriter : dict형으로 쓸 수 있음, fieldnames : 필드명(헤더네임)쓸 수 있음. wt.writeheader() # 헤더 네임 작성 for v in w: wt.writerow({'One' : v[0], 'Two' : v[1], 'Three': v[2]}) 수행 시 아래와 같이 출력 파일이 한줄씩 띄어서 출력이 되고있습니다. 선생님이 작성하신 코드 그대로 해도 동일한 결과가 나타나는데, 뭐때문에 이런걸까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] <프로젝트 생성>강의를 보고 따라 스프링부트 프로젝트를 생성했습니다. 그런데 다음 오류가 발생하여 글 남깁니다. _________________________ java.io .StreamCorruptedException: invalid type code: 00 > invalid type code: 00 ___________________________ 다음은 빌드 그레들 코드 내용입니다.(자바 17 설치 또한 완료했습니다) 어떻게 해결할 수 있을까요? ____________________________ plugins { id 'java' id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() }
안녕하세요 선생님. 스프링 부트 2.7.x 버전에서 하기 스크린샷과 같이 설정 하였을때 인증프로바이더가 중복으로 등록 되는 문제가 발생하였습니다. 하기와 같이 인증매니저를 설정을 수정하니 인증프로바이더가 정상적으로 1개 등록되었습니다. 왜 이런 일이 발생하는지 잘 이해가 되지 않아서요.. 선생님께서 이유를 아신다면 설명해주시면 감사하겠습니다.
def dic_solution(nums): answer = -1 sH = dict() for i in nums: if(i in sH): sH[i]+=1 else: sH[i]=1 for i in sH: if(sH[i]==1): if(i>answer): answer=i return answer 이렇게 dic으로 풀었는데 수업에서는 다른 방법으로 풀었더라고요 수업 끝에서 대충 듣긴 했는데 그냥 단순히 작아서 direct address table로 만든건가요? 아니면 추가적인 이유가 있나요? 궁금합니다.
파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
안녕하세요 강사님, ProcessPoolExecutor를 이용해서 아래와 같이 코드를 작성했는데요, return된 pid를 출력해보면 계속 증가하는 모습을 보이는데, python에서 할당받은 pid range 내에서만 circular로 반복되는 걸까요??? 이렇게 계속 증가하는게 별다른 문제는 되지 않을까요? try: while True: with ProcessPoolExecutor(max_workers=6) as ex: processes = {} # submit tasks to the pool processes.update({ex.submit(self.hello, time)}) for future in as_completed(processes, timeout=3): # check for a failure if future.exception(): # report progress LOG.error("Failed get %s", processes[future]) data = future.result() module = processes[future] pid = data
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] AppConfig 작성시 사진과 같이 코드를 작성하면 OrderServiceImple 에 들어가는 MemoryMeberRepository랑 Memberservice에 들어가는 MemoryMeberRepository 각 각 new 로 생성하여 할당했으므로 둘이 동기화가 안돼는 거 아닌가요??
종합 실전예제3. 이커머스 앱 UI 디자인- 오픈소스 템플릿을 활용한 UI 디자인 기초작업 강의에서 질문드립니다. 하단 탭바를 복사해서 왔을 때 Star 아이콘 프레임 수치들이 고정값으로 수정할 수 없게 되어있습니다. Component 가 제대로 삭제되지 않는 것 같습니다. 강의에서 알려주신대로 복사하고 해당 Component를 삭제해도 Go to main component 누르면 오픈소스 파일로 넘어갑니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. @RequestParam 어노테이션은 localhost:8080/?username=kim 처럼 뒤에 쿼리문을 받는 거라고 알고있는데 강의 영상에서는 save 함수에서 쿼리문이 없는데도 값이 전달되는데 이유가 무엇인지 궁금합니다
안녕하세요, 강의 잘 듣던 중 궁금한 점이 생겨 질문 남깁니다. Outer join 실습 - 02에서 -- orders_items에 주문번호(order_id)가 없는 order_id를 가진 orders 데이터 찾기 select * from nw.orders a left join nw.order_items b on a.order_id = b.order_id; where b.order_id is null ; 여기서 만약 결과값이 있는 데이터였다고 가정할때 is null이 쓰인 where 절에서 a.order_id로 쓰면 원하는 결과값이 나오지 않는 게 맞나요?
안녕하세요 강사님 강의 잘 보고있습니다. 강사님의 강의를 보고 따로 프로젝트를 만들어 보고 있는데 로컬주소/dashboard를 하면 dashboard가 안열러서 뭐가 잘못됐는지 궁금해서 질문드립니다! 일단 프로젝트 구조입니다. urls.py 입니다 dashboard/urls/dashboard.py 입니다 dashboard/views/dashboard.py 입니다. 실행을 하면 url이 없다고 합니다
안녕하세요! 싱글톤 강의 듣다가 궁금한 점이 있어서 질문 남깁니다. 우선 제가 이해한 내용이 맞는지 확인 부탁드립니다. @Configuration을 붙이지 않고, @Bean만 붙인 객체들은 생성하면 빈에 등록되며, 빈 컨테이너에 의해 관리는 되지만 @Configuration를 붙이지 않았기 때문에 스프링이 AppConfig CGLIB라는 라이브러리를 사용하지 않아서 동일한 객체를 가지고 오지 않아 싱글톤이 보장되지 않는다. 맞나요? 그래서 @Configuration을 쓰지 않았을 때 memberRepository가 3번 출력이 되는 것 까지는 이해했습니다.. 제가 이해가 안 가는 부분은 MemberServiceImpl에 들어있는 memberRepository가 왜 new MemoryMemberRepository()를 넣어준 것과 같나요? 왜 스프링 컨테이너가 관리하지 않나요...? AppConfig에서 memberRepository()에서 new MemoryMemberRepository() 해줬는데 여기에 싱글톤 적용이 되지 않아서 계속 new 해준 것과 같다는 의미인가요?