묻고 답해요
137만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
QClass가 생성되지만 import가 안되는 문제에 관하여
plugins { id 'java' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.tony' version = '0.0.1-SNAPSHOT' 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' implementation 'com.querydsl:querydsl-core' implementation 'com.querydsl:querydsl-jpa' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor 'jakarta.persistence:jakarta.persistence-api' annotationProcessor 'jakarta.annotation:jakarta.annotation-api' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' }안녕하세요 호돌맨 선생님 질문이 있습니다.위와 같은 build.gradle 로 했을시에 build/generated에 QPost.java 가 생성되는것을 확인했지만실제 PostRepositoryImpl에서 import를 해올수 없었습니다.구글링을 하며 여러 시도를 했었지만 다 실패해더라구요하지만 운좋게 아래와 같은 설정( https://velog.io/@soyeon207/QueryDSL-Spring-Boot-%EC%97%90%EC%84%9C-QueryDSL-JPA-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 )을 찾아서 import하는데 성공했습니다.plugins { id 'java' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.tony' version = '0.0.1-SNAPSHOT' 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' implementation 'com.querydsl:querydsl-core' implementation 'com.querydsl:querydsl-jpa' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor 'jakarta.persistence:jakarta.persistence-api' annotationProcessor 'jakarta.annotation:jakarta.annotation-api' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } def querydslSrcDir = 'src/main/generated' sourceSets { main { java { srcDirs += [ querydslSrcDir ] } } } compileJava { options.compilerArgs << '-Aquerydsl.generatedAnnotationClass=javax.annotation.Generated' } tasks.withType(JavaCompile) { options.generatedSourceOutputDirectory = file(querydslSrcDir) } clean { delete file(querydslSrcDir) } tasks.named('test') { useJUnitPlatform() } 이 방식으로 하면 build/generated에는 프로젝트 폴더들만 생기고 src/main/generated에 Post.java 가 생겨서 PostRepostioryImpl에도 잘 import가 되는데 이렇게 해도 추후에 문제가 되는부분이 있을까요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
테스트 전체 실행시 id 값이 4부터 시작하는 현상
@SpringBootTest @AutoConfigureMockMvc @PropertySource("classpath:messages.properties") class PostControllerTest { @Autowired private ObjectMapper mapper; @Autowired private Environment environment; @Autowired private MockMvc mockMvc; @Autowired private PostRepository postRepository; @BeforeEach void clean() { postRepository.deleteAll(); } @Test @DisplayName("/posts 요청시 Hello World를 출력한다.") void test() throws Exception { // given PostCreate request = PostCreate.builder() .title("제목입니다.") .content("내용입니다.") .build(); String json = mapper.writeValueAsString(request); // expected mockMvc.perform(MockMvcRequestBuilders.post("/posts") .contentType(MediaType.APPLICATION_JSON) .content(json) // .content("{\"title\": \"hithere\", \"content\": \"blah\"}") ) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().string("")) .andDo(print()); } @Test @DisplayName("/posts 요청시 title 값은 필수다.") void test2() throws Exception { Class<? extends PostControllerTest> aClass = getClass(); ClassLoader classLoader = getClass().getClassLoader(); URL resource = classLoader.getResource("messages.properties"); // given PostCreate request = PostCreate.builder() .content("내용입니다.") .build(); String json = mapper.writeValueAsString(request); // expected mockMvc.perform(MockMvcRequestBuilders.post("/posts") .contentType(MediaType.APPLICATION_JSON) .content(json) ) .andExpect(MockMvcResultMatchers.status().isBadRequest()) .andExpect(MockMvcResultMatchers.jsonPath("$.code").value("400")) .andExpect(MockMvcResultMatchers.jsonPath("$.message").value("잘못된 요청입니다.")) .andExpect(MockMvcResultMatchers.jsonPath("$.validation.title").value(environment.getProperty("post.NotBlank"))) .andDo(print()); } @Test @DisplayName("/posts 요청시 db에 값이 저장된다.") void test3() throws Exception { // given PostCreate request = PostCreate.builder() .title("제목입니다.") .content("내용입니다.") .build(); String json = mapper.writeValueAsString(request); // expected mockMvc.perform(MockMvcRequestBuilders.post("/posts") .contentType(MediaType.APPLICATION_JSON) .content(json) ) .andExpect(MockMvcResultMatchers.status().isOk()) .andDo(print()); // then assertEquals(1L, postRepository.count()); Post post = postRepository.findAll().get(0); assertEquals("제목입니다.",post.getTitle()); assertEquals("내용입니다.",post.getContent()); } @Test @DisplayName("글 1개 조회") void test4() throws Exception { // given Post post = Post.builder() .title("123456789012345") .content("bar") .build(); postRepository.save(post); // when // expected mockMvc.perform(MockMvcRequestBuilders.get("/posts/{postId}",post.getId()) .contentType(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.jsonPath("$.id").value(post.getId())) .andExpect(MockMvcResultMatchers.jsonPath("$.title").value("1234567890")) .andExpect(MockMvcResultMatchers.jsonPath("$.content").value("bar")) .andDo(print()); // then } @Test @DisplayName("글 여러개 조회") void test5() throws Exception { // given List<Post> requestPosts = IntStream.range(1,31) .mapToObj(i -> Post.builder() .title("title " + i) .content("content " + i) .build() ).collect(Collectors.toList()); postRepository.saveAll(requestPosts); // expected mockMvc.perform(MockMvcRequestBuilders.get("/posts?page=1&sort=id,desc") .contentType(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.jsonPath("$.length()",Matchers.is(5))) .andExpect(MockMvcResultMatchers.jsonPath("$[0].id").value(30)) .andExpect(MockMvcResultMatchers.jsonPath("$[0].title").value("title 30")) .andExpect(MockMvcResultMatchers.jsonPath("$[0].content").value("content 30")) .andDo(print()); } }안녕하세요 호돌맨님 질문이 있습니다.test5를 단독으로 실행하면 문제없는데전체를 실행했을 때는 postRepository.saveAll 전까지는 requestPosts 안에 Post가 id가 1부터 시작하는데saveAll을 지나고 나서는 id가 4부터 시작하게됩니다.@BeforeEach에서 postRepository.deleteAll을 수행하고 있습니다. 제생각에는 이게 Entity 의 @GeneratedValue(strategy = GenerationType.IDENTITY) 와 연관이 있는건가요?해당 설정을 하면 말씀해주신것처럼 persist가 호출되는 시점에 id값을 db로부터 얻어오기 때문에 아무리 row가 지워졌어도 h2 내부적으로 id를1씩 증가시켜왔기에 그 증가된 값이 requestPosts 의 값도 변형시킨것이 맞나요?
-
해결됨스스로 구축하는 AWS 클라우드 인프라 - 기본편
cloudfront 부분 수강중
선생님이 하신것과는 다르게 x-chche가 hit가아닌 miss라고뜨는데 뭐가 문제일까요?? 선생님 수업을 차근차근따라했는데...그리고 f5키를 여러번누르면 선생님 화면에서는 여러번 car.jpg가 뜨지만 제화면에서는 하나만 뜹니다.이렇게요... 알려주시면 감사하겠습니다
-
미해결AWS(Amazon Web Service) 입문자를 위한 강의
index.html 이 time_out과 함께 동작하지 않는 경우 해결법
인스턴스 클릭 후보안 탭에서 보안그룹 설정을 바꿔줘야 합니다.기본 설정이 인바운드 규칙에 TCP만 오픈되어있습니다. Actions보안> 보안 그룹 id 클릭 >>인바운드 규칙 > 인바운드 규칙 편집 > 규칙 추가>HTTP, HTTPS 추가 : 소스 -> 사용자지정 : 내IP>규칙 저장
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
500 에러가 납니다..
docker-compose up이후에 build는 다 되서 메인페이지는 열리지만 이렇게 에러가 납니다. 제가 한게 이상한가 싶어서 깃허브에 있는 코드로 docker-compose up해도 저런 오류가 나는데 무슨 문제인지 궁금합니다..!
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
docker-compose.yml 수정 후
안녕하세요. 강의 잘 듣고 있습니다!배포 후 AWS에서 에러난 것을 수정 해주신 코드 보며 잘 해결했습니다.궁금한 점이 docker-compose.yml 내부 코드를 수정하고 나서 다시 터미널에 docker-compose up --build를 해서 컨테이너를 만들고 깃허브에 푸쉬를 해야 하는 지 아니면 바로 깃허브에 푸쉬하면 되는 것인지 궁금합니다.이번에는 혹시 몰라서 빌드를 하고 푸쉬하니 배포는 잘 됐습니다!
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
Windows Volume 내용 변경안됨
안녕하세요 Windows 환경에서 Volume 적용 후 내용을 변경하였는데 반영이 안되는데 이유가 어떻게 될까요 docker build -t smileajw1004/nodejs ./docker run -d -p 5000:8080 -v /usr/src/app/node_modules -v ${pwd}:/usr/src/app smileajw1004/nodejs 실행은 정상적으로 이루어지나 소스 수정 후 반영이 안됩니다. 아래 글에 댓글에는 볼륨에 이상이있다 라고만 써주셔서 해결책이 없는데 혹시 방법이 없는건가요
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
Lightsail에 들어가지 못하면 강의 진행이 안될까요?
현재 Lightsail에 들어가지지 않는데... 이러면 강의 진행이 어려울까요...?
-
해결됨스스로 구축하는 AWS 클라우드 인프라 - 기본편
NAT GW, LB 관련 문의
안녕하세요~!외부에서 사용자가 EC2 웹서버 접근할때 LB를 통해서 들어오고,패킷이 다시 LB를 통해서 나가는게 맞지 않나요??LB로 들어온 패킷이 NAT로 나가는게 잘 이해가 안되서요..NAT는 EC2에서 외부 통신이 필요할때 쓰는걸로 알고있는데,헷갈려서 문의드려요~!
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
mongodb connect
await mongoose.connect(MONGO_URI, {useNewUrlParser : true , useUnifiedTopology:true , useCreateIndex:true}); useCreateIndex:true}이부분을 추가시 mongodb 6.0이상 버전에서MongoParseError: option usecreateindex is not supported위와 같은 에러가 발생합니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
sh: 1: env-cmd: not found
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. aws ec2 배포 과정에서 문제가 있습니다. npm run build:prod 에서 문제로 .package.json에도 env-cmd 가 제대로 설치가 되어있고,script 문에도 정상적으로 적어져 있으나, sh: 1: env-cmd: not found 와 같은문제가 뜨네요 .
-
미해결AWS(Amazon Web Service) 중/상급자를 위한 강의
SQS로 이런것도 가능할까요?
데이터 하나가 1TB정도 되는 Log해당 데이터를 1024개의 인스턴스로 빠르게 처리하고싶음이때 1GB씩만 사이좋게 나눠서 처리하게 가능할까요?
-
해결됨스스로 구축하는 AWS 클라우드 인프라 - 기본편
private subnet에 위치한 EC2 인스턴스는 private cloud 인가요?
안녕하세요, 수강 중 궁금한 점이 생겨 질문 남깁니다. private subnet에 위치한 EC2 인스턴스를 private cloud, public subnet에 위치한 EC2 인스턴스를 public cloud로 이해해도 되나요?위의 내용이 맞다면, 본 강좌에선 private subnet와 public subnet을 모두 사용하기에 hybrid cloud를 구축한다고 볼 수 있나요?
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
API 요청시 인증에 대한 질문
인사안녕하세요.일단 강의에 감사한 마음에 그랜절 바치고 질문 시작하겠습니다🙇🙇 호돌킹 강의 들으며 한명의 더 열심히 하는 수강민수가 되기 위해 요즘 공부중인 코틀린으로 토이 프로젝트를 해보며 본 강의를 듣고 있습니다. 덕분에 강의 한 강의 들을때마다 오래 걸리기는 하지만 많은 공부가 되고 있습니다. 궁금하진 않으시겠지만 혹시 질문에 답변을 주시는데 필요할 까 싶어 링크도 남겨 봅니다https://github.com/QUIDEV/quidev 질문질문 내용은 다름이 아니라.. 제가 프로젝트에서 스프링 시큐리티를 적용 해 두었는데요, 이번 강의부터 API 요청을 vue.js 에서 보내다 보니 인증부분이 발목을 잡네요.지금까지는 항상 코드를 짤 때 프론트 부분은 템플릿 엔진을 썼었고, vue.js 를 사용 하더라도 라이브러리처럼 사용했던터라 굉장히 당황스러운 상황입니다. 당장의 강의를 마치기 위해 시큐리티를 걷어내고, 작성자를 기록하기 위해 비즈니스 로직에도 파고들어간 부분을 걷어낼 수는 있겠지만 어차피 언젠가는 마주쳤을 문제라고 생각해서 이번기회에 물리쳐 보려고 합니다. Vue.js 와 스프링 시큐리티 검색어로 이것 저것 찾아 본 결과 대세가 JWT 로 굳어지는 것 같은데 JWT를 공부해서 적용 시키면 될까요? 아니면 호돌맨은 다른 방법을 권장하실까요? 귀찮으시겠지만 선생님의 고견을 여쭙습니다. 조공으로 미리 5성 수강평도 남겼습니다. 감사합니다.
-
미해결
AWS 배포 시 getServerSideProps 오류 (Next js)
nest js와 react로 웹앱을 만들어 aws amplify를 이용해 배포하려고 하는데요. 이런 오류가 발생해서 deploy를 실패하고 있습니다. 제 SSR 코드는 이렇습니다.제가 완전 초보라 SIGNIN 페이지와 소스폴더 깃헙 링크를 첨부합니다. 제발 도와주세요.https://github.com/arty0928/SNS-Community-Instagramimport {getProviders, signIn as SignIntoProvider } from "next-auth/react"; import Header from "../../components/Header"; import Image from "next/future/image"; //Brower... function signIn({providers}){ return ( <> <Header /> <div className="flex flex-col items-center min-h-screen py-2 mt-56 text-center"> <Image className="w-80" src="/img/스쿼드 로고.png" alt="" width={400} height={200}/> <p className="font-xs italic"> SQUARD PROJECT - By EunSeo PARK </p> <div className='mt-20'> {Object.values(providers).map((provider) => ( <div key={provider.name}> <button className="p-3 bg-blue-500 rounded-lg text-white" onClick={() => SignIntoProvider(provider.id, {callbackUrl: "/"})}> Sign in with {provider.name} </button> </div> ))} </div> </div> </> ); } //Server side //export async function getServerSidedProps export async function getServerSideProps() { const providers = await getProviders(); return { props: { providers, }, }; } export default signIn; [WARNING]: Error occurred prerendering page "/auth/signin". Read more: https://nextjs.org/docs/messages/prerender-error Error: Error for page /auth/signin: pages with `getServerSideProps` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export at /codebuild/output/src687705454/src/SNS-Community-Instagram/node_modules/next/dist/export/worker.js:218:27 at async Span.traceAsyncFn (/codebuild/output/src687705454/src/SNS-Community-Instagram/node_modules/next/dist/trace/trace.js:79:20)
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Response 클래스
안녕하세요! Response 클래스가 필요하다는 것은 잘 이해했습니다.그런데 Response 클래스를 서비스가 아닌 컨트롤러에서 변환하는 것은 어떻게 생각하시나요? 서비스에서는 리포지토리에서 엔티티를 반환받아서, 컨트롤러에 엔티티를 전달하고 컨트롤러에서 엔티티를 Response로 변환하여 리턴하는 식으로 현재 개발을 해봤는데요. 생각을 좀 해보니까, 엔티티를 Response로 변환하는 것을 비즈니스 로직이라고 생각하면 서비스에 포함시키는게 맞는것 같고..뭔가 Response는 화면UI 에 따라 자주 변할 수 있는 가능성이 많으니까 차라리 서비스는 항상 엔티티만 리턴하고 컨트롤러에서 UI에 맞게 변환만 해서 반환하는 것도 나쁘지 않다고 생각했는데요. 혹시 어떤 방법이 실무에서 자주 쓰이는지 궁금합니다.
-
해결됨스스로 구축하는 AWS 클라우드 인프라 - 기본편
수업자료
실습시 사용하는 업로드 하시는 파일은 어디서 받나요? 제공해드린 파일을 업로드하라고 말씀하셨는데...
-
해결됨(신규 강의로 재오픈 예정) 스스로 구축하는 AWS 클라우드 네트워크 - 기본편
라우트테이블문의
기본적으로 생성되는 라우트테이블Name이 -로 되어있는녀석은 뭔가요? Main이라는 속성이 Yes로 되어있던데, 삭제는 또 가능한거같네요?
-
해결됨따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
7강 aws관련 질문입니다.
안녕하세요! 질문이 묻힌 것 같아 다시 작성하는 점 죄송합니다ㅠㅠㅠ 강사님의 답변을 보고 다시 docker-compose.yml파일과 .travis.yml파일을 살펴보았습니다. 8,9강에서 Docker-full-stack-app에서는 강사님 말씀처럼 도커허브의 Dockerfile을 이용해 만든 이미지를 사용하지만 6,7강에서는 Dockerfile.dev만 사용하고 Dockerfile을 사용하는 부분은 못찾겠더라구요ㅠㅠㅠ 조금은 지엽적인 질문일 수 있겠지만 너무 궁금합니다ㅠㅠ생소한 개념이 여러개 나와서 어렵지만 강사님 강의 여러번 돌려보면서 이해해보려 노력하고 있습니다! 오늘도 감사합니다!version: "3" services: react: build: context: . dockerfile: Dockerfile.dev ports: - "3000:3000" volumes: - /usr/src/app/node_modules - ./:/usr/src/app stdin_open: true tests: build: context: . dockerfile: Dockerfile.dev volumes: - /usr/src/app/node_modules - ./:/usr/src/app command: ["npm", "run", "test"]sudo: required language: generic services: - docker before_install: - echo "start creating an image with dockerfile" - docker build -t smileajw1004/docker-react-app -f Dockerfile.dev . script: - docker run -e CI=true smileajw1004/docker-react-app npm run test -- --coverage deploy: edge: true provider: elasticbeanstalk region: ap-northeast-2 app: docker-react-app env: DockerReactApp-env bucket_name: elasticbeanstalk-ap-northeast-2-972153559337 bucket_path: docker-react-app on: branch: master access_key_id: $AWS_ACCESS_KEY secret_access_key: $AWS_SECRET_ACCESS_KEY
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
AWS Deploy -> Gate Error ( code : 502 ) | Elastic Beanstalk 에 Linux 2 만 존재하는 경우
React App 을 AWS EB 에 배포하는 과정에서 502 Error 가 발생합니다.아마 강의에서 말씀하신 것 처럼 Linux 버전 차이 말고는 다른점이 없기 때문에 Linux2 로 EB 를 설정해서 발생하는 Error 인 것 같습니다.하지만 현재 AWS EB 에서 제공하는 Docker platform 중에 강의에서 선택하신 Linux( version 1 ) 이존재하지 않는데 이 경우 어떻게 하면 문제를 해결할 수 있을까요?