묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
SessionConst
교재 6.로그인처리1 p 35 보면SessionConst가 있는데요 이거 enum으론 하면 안될까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
특강을 보고 공부 순서 관련해서 궁금한 점이 있습니다!
내가 IT 대기업에 합격한 방법 영상에서 말씀해주신 회사별 코딩테스트 난이도, 필수 알고리즘 개념 등이 다른 것 같은데 혹시 말씀해주신 야놀자, NHN등 스타트업의 코테에 우선적으로 지원해보려면 순서대로 강의들을 다 듣는게 맞을까요 아니면 건너뛰거나 먼저 들어볼 법한 주차가 있을까요? eg. 스타트업 코테를 목표로 알고리즘 공부를 하고 있으면 일단 몇 주차 개념과 문제를 풀어보고 일단 지원해보는 것을 추천. 등의 답변을 해주신다면 감사드리겠습니다! 현재 실력은 스타트업 코테 문제들에서 평균적으로 테케 3번까지는 맞는데 그 이후 효율성 검사 케이스들 또는 반례 케이스들에서 거의 대부분 해결을 못합니다 ㅜ
-
미해결토비의 스프링 부트 - 이해와 원리
Service 계층에서 테스트 관련해서 질문이 있습니다.
안녕하세요 토비님제가 프로젝트를 진행하면서 도저히 모르는 부분이 있습니다.강의와 관련이 없는 질문이지만, 간절한 마음으로 질문해봅니다 Service 계층은 상태검증과 행위 검증에 대한 고민이 있습니다.특히, 객체의 책임과 테스트 범위에 대한 관점에 대한 차이때문에 고민이 있습니다.우선, 코드를 보여드리겠습니다.CommunityCommandService.updateCommunity는 커뮤니티의 소개란과 해시태그를 업데이트하는 부분입니다.//CommunityCommandService.java public void updateCommunity(Long userId, Long communityId, String description, List<String> newTags) { Community community = communityRepository.findCommunityById(communityId); memberQueryService.getManager(userId, communityId); community.updateCommunity(description, newTags); }해당 코드는 communityId로 community를 가져오고, userId / communityId로 요청한 유저가 메니저인지 확인합니다.그 후, community 객체에게 update를 위임합니다. 그러면 community 객체는 내부 상태값을 변경합니다. 여기서, 상태 검증인지 행위 검증인지에 따라 테스트가 달라집니다.public class CommunityCommandServiceTest { @Test void 상태검증_테스트() { Community community = new Community("dummy Intro", List.of("dummy tag")); given(communityRepository.findById(any)).willReturn(community); communityCommandService.updateCommunity(1L, "new intro", List.of("new tag")); assertThat(community.getIntroduce).isEqualTo("new intro"); assertThat(community.getTags).containsExactly("new tag"); } @Test void 행위검증_테스트() { Community community = mock(Community.class); given(communityRepository.findById(any)).willReturn(community); communityCommandService.updateCommunity(1L, "new intro", List.of("new tag")); then(community).should(times(1)).update("new intro", List.of("new tag")) } }상태검증_테스트의 검증 부분을 보면, 위임한 결과에 대해서 테스트를 진행하고 있습니다. Community 클래스의 update를 또 테스트하는 것 같은 느낌이 있습니다. 즉, 서비스 계층의 테스트 영역을 넘어서는 것인지 의문입니다.반면, 행위검증_테스트는 community.update가 호출하면서 위임했는지에 대해서만 테스트합니다. 하지만, 내부 로직에 하드코딩 되어있는 듯 합니다.사실 저는 상태검증을 더 선호합니다. 하지만 상태 검증이 객체지향스러운지 잘 모르겠습니다. 어느정도 감수해야하는 것 일까요? 정리하자면,상태검증CommunityCommandService.updateCommunity로 변경된 상태를 테스트개인적으로 선호하는 방식. 하지만, 상태를 테스트하기 때문에 객체지향의 관점에서 맞는지 확신이 없다. 테스트코드는 이 부분을 감수하는 것인지?행위검증협력한 객체의 행위에 대한 테스트객체지향의 관점에서 위임이 잘 이루어졌는지 테스트하는게 자연스럽다고 생각 질문하자면,서비스계층에서 Community.update()로 커뮤니티 내부 값에 대한 변경을 요청하였습니다.객체지향에서는 객체들이 서로 책임을 위임하며 상호작용하는 것이기 때문에Service 계층에서는 위임이 되었는지 호출 여부만 판단하는게 적절한지, 아니면, Service 계층에서 위임한 그 결과 Community의 내부값을 바꾼게 적절한 테스트인지..만약 이 방법이 맞다면 객체지향스럽다고 말할 수 있는지..?어떤 방식이 적절한지 잘 모르겠습니다. 이론적인 부분과 실제 테스트에 대한 괴리때문에 발생하는 문제 같습니다. 긴 질문 읽어주셔서 감사드립니다!
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
CheckForCatalogUpdates() 대한 이해
1)Addressables.CheckForCatalogUpdates()를 통해 업데이트 할께 있다. 없다를 판단 하는거 같습니다. 체크를 통해 Count가 0 이상이면 업데이트 할께 있으므로 다운로드 진행으로 알고 있습니다. 그런데 의문점 드는 부분의 코드가 CheckForCatalogUpdates() 체크 후Count 0 이상 > 카탈로그 업데이트 > 다운로드 사이즈 체크 Count 0 이하 > 다운로드 사이즈 체크 2번 같은 경우 카탈로그 체크로 인해 0 이므로 다운로드를 받을 필요가 없는데 굳이 다운로드 사이즈 체크해서 다운로드를 하는 이유가 무엇인가요? 2) 제공 해주신 프로젝트로 카탈로그 테스트 중 이상 현상이 나와 질문 드립니다. 번들 빌드를 한후 서버에 올리고 다운을 받으면, AppData\LocalLow\Unity/프로젝트이름/ 위치로 다운 받아 지는 거 같습니다. 다시 테스트를 위해 위 위치의 캐시를 지운 후 테스트를 하면 카탈로그체크카운트가 0입니다.내 캐쉬에 없는데도 카탈로그체크카운트가 0이상이지 않습니다. 혹시나 몰라 addressables_content_state.bin도 삭제 Group > Clean Build 를 해보아도 카탈로그체크카운트가 카운트 되지 않습니다.최초 실행은 카탈로그체크카운트가 카운트 되지 않나요?아님 리셋 시키는 방법이 있을까요?
-
미해결실리콘밸리 엔지니어에게 배우는 파이썬 아파치 스파크
EMR 환경시 분산처리가능하게하는 conf 설정 문의
EMR 환경에서 spark_app = SparkSession.builder.appName(app_name).getOrCreate() 하면 자동으로 분산처리가 되나요? 아니면 conf를 따로해줘야하는지요? 따로 할경우는 어떻게 conf를 잡으면 될까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
test/resources/application.yml이 없으면
main/resources/application.yml 을 따라가게 되는 건가요 ? 자바에서는 디비를 사용하고 싶고, test에서만 메모리 DB를 사용하고 싶다면 아무런 내용이 없는 application.yml를 test/resources 아래 생성만 하면 되는 건가요 ?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
회원가입 인증 메일 확인
accountService 애서 processNewAccount 을 Account newAccount = saveNewAccount(signUpForm);;newAccount.getGenerateEmailCheckToken();accountRepository.flush();sendSignUpConfirmEmail(newAccount);로하면@Transactional 을 메서드 상단에 선언을 안해도 해결이 가능한데요. @Transactional 를 사용하지않고강제로 플러시를 해준경우에 추후에 문제가 될만 소지가 있을까요?
-
해결됨[코드캠프] 입문자를 위한 Javascript 알고리즘 이론+실습
섹션7 반복문 filter [그건 제 잔상입니다만?] 파트에서 코드스니펫 오류
function solution(nameList) {// 여기에 코드를 작성하세요 }solution( ["123.123.02", "123.123.02", "432.223.07", "123.173.08"], "123.123.02");// ["432.223.07", "123.173.08"]solution( ["228.093.22", "228.093.22", "228.093.22"], "228.093.22");// [] 노션에 nameList라고 매개변수가 주어져 있는데안내사항과 강의에서는 userList, ip를 이용합니다.수정 부탁드려요 ^^
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
명시적, 암시적 형변환 관련 질문입니다
explicit Knight(int hp) { cout << "Knight 기본 생성자 호출" << endl; _hp = hp; _attack = 10; _posY = 0; _posX = 0; }명시적 형변환 문법인 explicit를 뺀 상태에서k5 = 1 일때 컴파일러에 의해 암시적 형변환으로 인해함수의 인자 int hp에 1이 들어가는 건가요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
MyBatisItemRepository와 MybatisConfig
MyBatisItemRepostiory에서 @Repostiory와 @RequiredArgsConstructor을 통해서 스프링빈으로 등록하고 ItemMapper와 의존관계를 주입했잖아요근데 MYBatisConfig에서 다시MybatisConfig에 ItemMapper의존관계를 주입하는 이유가 뭔가요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
슬라이싱 연습에서 마지막 앞 단어 관련
슬라이싱 연습에서 마지막 앞 단어 찾는거에서listbox[-2:-1]listbox[7:8]listbox[7:-1]와 같이 범위형식으로 풀이를 주셨는데,단순하게 listbox[-2]로만 출력하는것과 차이가 있나요?실제로 코딩하거나 실무에서 사용할 때 차이가 있나 궁금해요.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part6: 웹 서버
싱크 문제
해당 영상 싱크가 맞지 않는 것 같네요! 이해하는데 문제는 없지만 다른분들 위해 확인 부탁드립니다
-
해결됨Next.js 시작하기(feat. 지도 서비스 개발)
API Routes로 변경 후 JSON 오류
안녕하세요 강사님. 먼저 강의 감사히 잘 듣고 있습니다.다름이 아니라 API Routes로 프로젝트를 변경한 이후 아래와 같은 에러가 발생합니다.아래 자막에 달아 두신 것과 같이 .env파일도 정상적으로 배포한 사이트로 바꿔 두었고 혹시몰라 JSON파일에 대한 파싱문제가 있는것인지 확인하고 싶습니다.https://github.com/eugene028/NextJsMapgithub주소도 남깁니다. 잘 되다가 API Routes로 변경하니까 이런 에러가 뜨네요!! ㅜㅜ
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
kex_exchange_identification: Connection closed by remote host 에러
OS : Mac OS Venturadocker run 스크립트 : docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:latest /usr/sbin/init이렇게 하고 ssh root@127.0.0.1 -p 10022 로 접속을 요청 하니 에러가 발생하네요빠른 확이 부탁드립니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
학습 자료 ver.2의 링크는 어디서 확인할 수 있을까요?
강의를 듣다보니 새로운 업데이트 된게 있어서 그쪽을 들으려고 하는데 혹시 학습 자료 ver.2의 노션 링크는 어디서 확인할 수 있을까요? 아니면 기존의 [Backend] 학습 자료 ver.1이 업데이트 된건가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서버에 파일업로드할 때는 어떻게하나요?
로컬에서 파일 업로드를 구현할 때는 강의때 해준 방법 처럼 file.dir변수에 C:/test_img/ 이런식으로 변수를 지정하고 저장을 하였는데 이번에 cafe24를 사용해서 프로젝트를 배포하는 작업중인데 어떻게 경로를 설정해야할 지 모르겠어서 질문드립니다ㅠㅠ cafe24에 문의 해보았는데 server.xml 파일에서 해당 경로를 매핑 해줘야 한다고 하였습니다.<Context docBase ="서버의 업로드 폴더 경로" path="localhost 뒤에 붙을 업로드 폴더의 경로" reloadable="true"/>https://yn971106.tistory.com/104?category=1016466https://kang0312.tistory.com/95https://tibang.tistory.com/entry/%EC%82%AC%EC%A7%84%EA%B0%99%EC%9D%80-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C%EC%8B%9C-%EA%B2%BD%EB%A1%9C-%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95tomcat-%EA%B8%B0%EC%A4%80아래 블로그를 참고하라고 하긴하던데 매핑하는 방법만 알려주고, 파일업 업로드하는 로직은 없고, 구글링을 해봐도 강사님께서 알려주신 파일 업로드 로직과는 다른 글들 뿐이여서 파일 업로드 로직을 다 뜯어 고쳐야 하는건가.... 고민입니다.혹시 file.dir값만 딱 수정해서 서버에서 파일 업로드 할 수 있는 방법 아시면 알려주시면 감사하겠습니다.... 참고로 cafe24서버에 올린 폴더 경로입니다 upload폴더는 제가 생성한거고 권한도 777로 주었습니다.file.dir=/tomcat/webapps/upload/위와같이 경로 값을 주었는데 잘 작동하지 않습니다ㅠㅠ +추가강사님이 알려주신 file.dir을 통해 파일 경로를 지정하는 방법은 spring boot에서 톰캣서버를 내장하고 있어서 가능한건가요?? cafe24에 배포할 때는 서버를 내장하지 않으므로 server.xml에 <Context docBase="D:\IMAGES" path="/IMAGES" reloadable="false"/> 이거를 추가해야하는 건가요?? 서버쪽 영역으로 가니까 아직 모르는게 많네요ㅠㅠㅠ
-
미해결파이썬 플라스크(Flask) 기반 웹 개발 및 업무 자동화 서비스 활용
127.0.0.1:5000 접속 시 오류
to load resource: the server responded with a status of 404 (NOT FOUND)127.0.0.1:5000 에 접속하면 이러한 오류가 발생해. 어떻게 해결 할 수 있을까?해당 문제는 http://127.0.0.1:5000/ 경로에 해당하는 라우트가 정의되지 않았기 때문에 발생합니다. 이 문제를 해결하려면 기본 경로('/')에 대한 라우트를 추가해야 합니다. 예를 들어, 기본 경로로 이동할 때 사용자 이름을 기본값으로 설정할 수 있습니다.app.py를 다음과 같이 수정하세요:```pythonfrom flask import Flask, render_template, requestapp = Flask(__name__)@app.route('/')def index(): return get_page('default_username') # 여기서 'default_username'을 원하는 기본 사용자 이름으로 변경하세요.@app.route('/<username>')def get_page(username): length = len(username) return render_template("index.html", name=username, length=length)if name == "__main__": app.run()```이제 http://127.0.0.1:5000/에 접속하면 404 오류가 아닌 기본 사용자 이름에 대한 페이지가 표시됩니다. 사용자 이름을 URL에 직접 추가하여 다른 사용자 이름에 대한 결과를 확인할 수도 있습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpql size에서 질문이 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.try { Team team = new Team(); team.setName("teamA"); em.persist(team); Member member = new Member(); member.setUsername(" 유저 "); member.setAge(10); member.setTeam(team); member.setMemberType(MemberType.ADMIN); em.persist(member); em.flush(); em.clear(); String query = "select size(t.members) from Team t"; List<Integer> resultList = em.createQuery(query, Integer.class).getResultList(); System.out.println(resultList.size()); for (Integer s : resultList) { System.out.println("s = " + s); } tx.commit(); }코드는 위와 같이 작성하였습니다. 실제로 팀을 하나 넣었고 count가 1로 측정되는 것을 확인해보고 싶어서 테스트해 보았는데 java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class java.lang.Integer ([Ljava.lang.Object; and java.lang.Integer are in module java.base of loader 'bootstrap') at org.example.Main.main(Main.java:36)위와 같은 에러가 발생햇습니다. Team에 멤버가 들어 있는것도 확인을 하였고 resultList가 for문 안에서 돌면서 등록된 게 하나 이니까 1이 출력될 것이라 예상햇는데 ClassCastException이 발생하더군요. 여러가지 생각해 보았는데 답이 나오질 않아서 질문드립니다!제가 어딘가 잘못 사용하고 있는 것일까요??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
체크예외와 런타임예외의 차이점
수업과 직접적으로 관련있다고 보긴 어려운 질문이지만, 체크예외와 런타임예외에 대해서 궁금증이 생겨서 질문 남깁니다!아래 코드는 잘 실행됩니다. 그리고 IllegalStateException 오류가 잡히고 로그가 남습니다. @Test void b(){ try { ex2(); }catch (IllegalStateException e) { log.error("message",e); } } private void ex2() throws RuntimeException{ RuntimeException ex = new IllegalStateException(); throw ex; } 그러나 아래 코드는 오류를 제공합니다.@Test void a(){ try { ex1(); }catch (SQLNonTransientException e) { log.error("message",e); } } private void ex1() throws SQLException{ SQLException ex = new SQLNonTransientException(); throw ex; } ex1()에서 java.sql.SQLException 오류가 발생합니다.첫 번째 코드가 성공하고 IllegalStateException 오류가 잡히고 로그가 남으므로 두 번째 코드도 성공해야 한다고 생각합니다.SQLNonTransientException은 SQLException의 하위 예외이므로 IllegalStateException은 RuntimeException의 하위 클래스이기 때문입니다.런타임 에러일 때 에러가 발생하면 지정된 하위 에러로 잡을 수 있는데 Check예외인 SQLException의 경우에는 적용되지 않는 이유를 알고 싶습니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
강의 하실 때 사용한 소스 코드 다운 가능하나요?
자바 강의 하실때 나오는 소스 코드 받을 수 없을까요?자바 완강하면서 강의 내용과 소스 코드 모두 타이핑하면서 공부 했는 데 일부가 날라갔어요ㅠㅠㅠ