스프링 입문, 초보에게도 괜찮은지
해결됨
토비의 스프링 6 - 이해와 원리
안녕하세요! 토비님, 제가 현재 JAVA와 DB를 공부하고 스프링으로 넘어가려고 합니다. 다른 스프링 강의들은 구버전이던가 겉핥기 식 강의가 많은걸 후기로 많이 봤습니다. 그래서 최신 버전이기도 하고 수강평에 초보자가 들어도 괜찮다해서 스프링 입문을 토비님 강의로 시작하려하는데 괜찮을지 고민이되네요,,!
- java
- spring
172만명의 커뮤니티!! 함께 토론해봐요.
해결됨
토비의 스프링 6 - 이해와 원리
안녕하세요! 토비님, 제가 현재 JAVA와 DB를 공부하고 스프링으로 넘어가려고 합니다. 다른 스프링 강의들은 구버전이던가 겉핥기 식 강의가 많은걸 후기로 많이 봤습니다. 그래서 최신 버전이기도 하고 수강평에 초보자가 들어도 괜찮다해서 스프링 입문을 토비님 강의로 시작하려하는데 괜찮을지 고민이되네요,,!
미해결
Next + React Query로 SNS 서비스 만들기
안녕하세요 제로초님 강의 잘 듣고 있습니다. 사실 이 문제가 몇개월동안 계속 해결이 안되어서 강의를 수강한거나 마찬가지인데요. 아무리 스택오버플로우나, next.js issue에 직접 글을 올려도 해결이 안되어서 이렇게 질문 글 올립니다. 일단 Next.js 14 + Express 조합으로 배포를 한 상황이고 jwt 토큰을 쿠키에 담아서 로그인 기능을 구현했습니다. 또한 next.js Middleware 내부에서 액세스토큰을 재발급 받아주고 있습니다. 순서는 이렇습니다. 로그인 시에 사용자가 아이디 + 비밀번호를 입력해서 서버에게 요청한다. 서버에서 해당 아이디 값을 받아서 조회 후, 새로운 리프레시 토큰 + 액세스 토큰을 클라이언트로 보내준다. 백엔드 내부 코드는 다음과 같습니다. const newAccessToken = createNewAccessToken(existingUser); const newRefreshToken = createNewRefreshToken(existingUser); const hashedToken = await hashValue(newRefreshToken); await deleteRefreshTokenData(existingUser.id); await createRefreshTokenData(hashedToken, existingUser.id); return res.json({ success: true, accessTokenValue: newAccessToken, refreshTokenValue: newRefreshToken, }); Next.js 측에서 액세스 토큰과 리프레시 토큰을 받아서 API ROUTE로 POST 요청을 날려서 set cookie를 해준다. const sendTokenCookieToHandler = async (accessTokenValue: string, refreshTokenValue: string) => { await fetch('/api/token', { method: 'POST', body: JSON.stringify({ accessTokenValue, refreshTokenValue }), headers: new Headers({ 'Content-Type': 'application/json', }), cache: 'no-store', }); }; export default sendTokenCookieToHandler; ``` 그 후 액세스 토큰이 만료 되면, Next.js 미들웨어 단에서 리프레시 토큰을 다시 백엔드로 보내서 새로운 액세스 토큰을 받아온다. Next.js 미들웨어 코드는 이렇습니다. export async function middleware(request: NextRequest) { const { accessToken, refreshToken } = getTokenValues(request); if (!accessToken && refreshToken) { const res = await getNewAccessToken(refreshToken); if (res && res.newAccessToken) { const response = NextResponse.next(); const { newAccessToken } = res; response.cookies.set('accessToken', newAccessToken, { expires: new Date(Date.now() + 24 * 60 * 60 * 1000), }); return response; } } return NextResponse.next(); } ``` 받아온 액세스 토큰 값을 아예 middleware 단에서 set cookie 를 통해 쿠키로 설정해준다. 근데 여기서 문제는 초기에는 정상적으로 잘 작동합니다. 액세스 토큰이 만료 된 후에도 정상적으로 새로운 액세스토큰을 받아오기도 하고요 근데 문제는 일정 시간 후에(제가 생각했을때 리프레시토큰이 만료 된 후, 다시 로그인 요청을 보냈을때 같습니다.) 아예 새로운 리프레시 토큰과 액세스 토큰을 제대로 받아오지 못하는거 같습니다. 근데 F12 를 켜서 확인해보면 백엔드로 api 콜은 정상적으로 가고 있습니다.. 그래서 현재 다시 재배포를 할때마다 초기 상태로 돌아가서 로그인이 정상적으로 작동 하게 되는데요. 어디가 문제인걸까요 ? 여러 오픈톡이나 커뮤니티에 물어봤지만, 어떤분은 Next.js 내부에서 같은 라우트 그룹이면 미들웨어를 거치지 않아서 발생하는 문제라고도 하시는데 초기 배포 당시에, 리프레시 토큰을 처음에 잘 받았을때 일부러 액세스 토큰을 삭제하고 다시 새로고침하면 액세스 토큰을 제대로 잘 받아오고 있습니다.. 도저히 아무리 이리저리 수정해봐도 몇개월 동안 고치지 못해서 이렇게 글 남깁니다. 읽어주셔서 감사합니다.
해결됨
토비의 스프링 6 - 이해와 원리
모든 강의를 듣고 따라하면서 재미나게 실습했습니다. 그 중에서 롤백테스트할 때 jakarta.transaction.Transactional 또는 org.springframework.transaction.annotation.Transactional 의 @Transactional 만을 사용하면 정상동작합니다. 그런데, org.springframework.transaction.annotation.Transactional @Transactional(readOnly = true) readOnly = true 를 사용하여 테스트를 하면 insert 가 진행되지 않을 것을 예상했는데 진행이 되었습니다. 왜 그런지 궁금합니다. 그리고, 인프런안의 Kotlin 강좌중 추천할만한 강의가 있을까요? 어제 유튜브에서 최근의 건강에 대해서 언급하셨는데, 건강하고 늘 행복하게 보내세요.
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
4분05초쯤에, (ㄱ)에는 -> 이게 이해가 가는데 (ㄴ)에도 -> 이거인가요? d2가 포인터라서 -> 이렇게 접근하는건 알겠습니다 근데 *d2는 포인터에들어있는 값에서 접근하는거라서 저는 . 이라고 생각했는데 -> 이게 들어가는게 잘 이해가지 않습니다.
해결됨
객체지향 개념에 바탕을 둔 JAVA 프로그래밍
강좌 운영이나 강의 내용에 관해 궁금한 점이 있으면 자유롭게 나누어주세요. 교수자, 수강생 누구나 글쓰기와 댓글 쓰기가 가능합니다.
해결됨
[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
아직 2차원 배열 또는 List로 해야되는것을 선택하는 기준이 잘 안잡히는데 문제에서 원하는 출력 형태가 연결된 모든 것들을 출력하는 느낌으로 질문한다면 List 이고, 그외에는 2차원 배열로 하면 될까요...? ㅠㅠ
해결됨
자바 프로그래밍
강좌 운영이나 강의 내용에 관해 궁금한 점이 있으면 자유롭게 나누어주세요. 교수자, 수강생 누구나 글쓰기와 댓글 쓰기가 가능합니다.
미해결
김영한의 실전 자바 - 중급 2편
영한이형 종이에 그려서 푼다고 하셨는데 어떤 식으로 그리는지 볼 수 있을까요?
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
상기 문제 중 println 두번째 st.b는 정적변수이자 인스턴스 변수로 0이 아닌지요 st.a 가 인스턴스 변수로 20인 것을 보면 st.b 또한 인스턴스 변수로 0이 되는 것이 아닌지 궁금합니다.
미해결
나도코딩의 자바 기본편 - 풀코스 (20시간)
컴퓨터 돋보기에서 시스템 환경변수 편집 >고급 > 환경변수 들어가서 환경변수 JAVA_HOME을 최초엔 C:\Program Files\Java\jdk-8.0.345.1-hotspot\라고 설정되어있는데 강의 마지막부에 갑자기 여 끝에 마지막에 bin 붙이셨는데 저도 따라 수정해서 bin 붙여야하나요? 이미 "PATH"에 %JAVA_HOME%\bin 이 되어 있는데요?
해결됨
김영한의 실전 자바 - 중급 1편
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 공백 제거 풀이를 보면서 의문이 생겨서 질문을 남깁니다. 공백 제거 하는것 을 보면 trim 메서드, strip 메서드가 있는것을 확인 할수가 있는데요. 왜 굳이 이렇게 나눈 이유가 뭘까? 라는 생각이 듭니다. 그냥 strip으로 통일해서 없애면 되는게 아닌가?라는 생각이요. 이렇게 나눈 이유가 있을 것 같은데...이유를 알려주실수 있으신가요? 그리고 현업 에서는 trim 메서드 만 사용하는지 아니면 strip 메서드만 사용하는지 아니면 혼용해서 사용하는지 알고 싶네요. 답변 부탁 드립니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] test.mv .db 파일 생성된 것 확인하고 그다음에 jdbc:h2:tcp://l ocalhost/~/test 이거 복사 붙여넣기 해서 연결 눌렀더니 사진처럼 연결이 안되네요 이거 관련된 질문 찾아봤는데 파일 지우고 다시 만들라는데 윈도우 cmd에서 touch 명령어가 안먹히는데 어떡하나요?
해결됨
자바 9부터 자바 21까지
강사님 안녕하세요 ! 자바 9 모듈 학습을 하다가 의문점이 생겨서 질문을 드립니다. JPMS을 사용하면 빌드 툴 없이 모듈 구성이 가능하다라는 말이 잘 이해가 되지 않습니다. plugins { id 'java-library' } group = 'com.example' version = '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { api(project(":domain")) testImplementation platform('org.junit:junit-bom:5.10.0') testImplementation 'org.junit.jupiter:junit-jupiter' } test { useJUnitPlatform() } 이렇게 build.gradle 파일 내에 추가로 설정을 해야 접근이 가능하게 되는데 이거는 gradle 빌드를 사용한게 아닌건가요 ? testImplementation platform('org.junit:junit-bom:5.10.0') 이렇게 maven을 통해서 가져오는 게 아니라서 빌드툴을 사용하지 않았다고 이해하면 될까요?
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
8번강의는 문제풀이가 아니라 문제를 풀어라고 숙제내는것 같습니다. 풀이의 느낌이 하나도 안나고 강의만 봐서는 왜 정답인지 너무 알기 힘드네요
미해결
김영한의 실전 자바 - 중급 2편
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요 영한님 항상 정성이 담긴 강의해주셔서 대단히 감사합니다:) 다름이 아니라 해당 부분 강의를 들었을 때 LinkedList와 배열의 조합으로 메모리 구조가 잘 떠오르지 않아서 제가 생각한 부분이 맞는지 질문드리는 점 양해 부탁드립니다(_ _) LinkedList 인덱스 배열[9] 부분에 9와 99가 같이 들어가는데요, 영한님께서 설명해주셨던 LinkedList 강의 부분 메모리 구조 그림으로 예를 든다면 배열[9] 부분에 노드가 이런식으로 두 개가 생성되는 것이 제가 이해한 부분이 맞을지 질문드립니다! 항상 감사합니다 :) )
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
교재는 어디서받을수있나요? 이론말고 전체교재
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요 영한님! 질문이있어서 찾아왔습니다. 현재 프로젝트를 진행중인데 한줄로 요약하면 기준 영양 성분에 맞추어 부족,과잉 영양분을 판별해 주는 프로젝트 입니다. 저는 기준 영양성분을 ENUM 타입으로 관리하자 는 입장이였습니다. 그 이유는 1) 저희 서비스는 적정영양성분 부족과잉을 판별 하는데 매번 DB를 조회해서 findProperAmountByName("단백질") 을 매번 같은 적정량을 조회하는 게 부담 스럽다. => Enum 타입으로 탄수화물의 적정량을 넣어두면 훨씬 편하게 조회할 수 있을 것이다. 2) findProperAmountByName("단백질") 은 현 재 코드만으로는 DB에 어떤 영양소가 있는지도 모르고 확인하기 어렵 다. ENUM 타입으로 묶으면 CARBON_HYDRATE,PROTEIN 등등 이렇게 묶어서 편하게 관리할 수 있다. 이렇게 생각하고 또 개발을 진행중에 있었습니다. 그러던 와중에 "영양제" 라는 컨텐츠에 탄수화물, 단백질 이 부족할 때 좋은 영양제라는 의미로 "탄수화물","단백질" 이라는 키워드를 쓰고 싶을 때 <아래는 영양제 칼럼> @ElementCollection(targetClass = StandardNutrient.class) @JoinTable(name = "StandardNutrient",joinColumns = @JoinColumn(name = "drug_id")) @Column(name ="StandardNutrientName", nullable = false) @Enumerated(EnumType.STRING) private Set<StandardNutrient> efficientNutrient = new HashSet<>(); 이렇게 쓰고 싶은 마음이 굴둑 같습니다. 이렇게 했을 때 발생할 수 있는 단점에 대해 알고 싶습니다. ( StandardNutrient는 Enum 타입입 니다. ) 1) 일단 StandareNutrient 의 종류가 바뀔일이 절대 없습니다! 2) 이 서비스의 Manager 만 영양제를 등록할 수 있습니다. 3) List 대신 Set 을 사용함으로써 다 delete 한이후 insert 하지도 않습니다. 어떻게 생각하시나요?
미해결
자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
AtomicInteger의 getAndUpdate가 람다를 적용하기 전의 값을 반환하므로, 해당 메소드의 반환 값을 출금 후 잔고가 아니고, 출금 전 잔고로 표현하는 것이 의미가 맞습니다. 추가로 출금 전의 잔고가 출금액 보다 작아야 잔고 부족으로 출금이 실패한다고 표현해야 자연스러운 것 같습니다. 해당 예시를 다음과 같이 수정했습니다. // main function for (int i = 0; i < 5; i++) { new Thread(() -> { int withdrawalAmount = 500; // 출금액 int beforeUpdatedBalance = accountBalance.getAndUpdate(balance -> { if (balance >= withdrawalAmount) { return balance - withdrawalAmount; // 출금 성공 } else { return balance; // 출금 실패 } }); if (beforeUpdatedBalance < withdrawalAmount) { System.out.println(Thread.currentThread().getName() + " : 잔고 부족으로 출금 실패"); } else { System.out.println(Thread.currentThread().getName() + " : 출금 전 잔고: " + beforeUpdatedBalance); } }).start(); } 강의 잘 듣고 있습니다. 감사합니다 🙂
미해결
김영한의 실전 자바 - 중급 1편
ctrl + alt + V 를 사용하여 자동 완성을 시키면 import가 생성되면서 이렇게 변합니다. 강사님의 화면에선 자동완성 시 NestedOuter.Nested 타입으로 생성되고 import 가 생성되지 않는데 이유를 알 수 있을까요...? ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.스프링 입문 수업을 듣고있는데 처음부터 막혔어요 ㅜㅜ 인텔지제이 설치부터 설정을 처음부터 어떻게 해야하나요 강의에서는 인텔리제이가 이미 깔려있고 설정도 어느정도 마친상태로 하던데 어떻게 해야하냐요