자주 쓰이고, 오타가 날법한 String 을 모아 아래 처럼 상수화 했습니다. 상수패키지 com.studyolle.core.constant.* 이후 Controller , Test 등에서 아래와 같이 사용중입니다. 질문입니다 Enum 으로 관리 하려고 했지만, 컨트롤러-핸들러 의 @GetMapping( Enum.URI.name() ) 과같은 선언도 불가능 하고, 단순 값 참조를 Enum .name() 이라던지, Enum .custom() 과 같이 덕지덕지 메서드가 붙게되어, 심플하게 하고자, Enum 은 사용하지 않았습니다. 그러나 이렇게 static final 필드 로 관리하다보면, 언젠가 양이 많아 질탠데, 이럴 경우는 또다시 나누어야 될거라 생각이 듭니다만.. 이런 일반적인 방식 보다 효과적으로 관리하는 ( Map 을 쓴다던지, 특정 패턴이라던지) 방법이 있을까요? 상수 관리는 이런 방향이 괜찮았다.. 라는 사례가 궁금합니다. 읽어주셔서 감사합니다.
안녕하세요. 맨 마지막에 플러시 정리해주실 때 설명이 헷갈려서 질문드립니다. 플러시는 트랜잭션 단위로 동작하기 때문에 '커밋 직전'에만 변경 내역을 DB에 날려주면 된다고 하셨는데요, 앞서 배운 그림 자료는 commit() 호출 -> flush() 호출 -> 쿼리가 날아감 인 것 같은데 커밋 직전에 변경 내역을 날린다는 게 무슨 의미인지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요! 주문 목록 검색 요청을 처리하는 OrderController의 orderList() 메서드 관련 질문이 있습니다. 제가 findOrders()내부 findAllByString() 로직을 이해한게 아니여서, orderList()메소드가 이런식으로 동작하는게 맞는지 궁금합니다. 이 메소드는 다음의 3가지 상황에 의해 호출 될 것 같은데요, 1. 상품 주문 화면에서 상품 주문 후, 주문을 처리하는 order() 메소드에 의한 리다이렉션 요청을 받을 때 2. 홈 화면에서 순수하게 주문 내역을 클릭하였을 때 3. 주문 내역 화면에서, 회원명 or 주문상태를 조건으로 하여 검색할 때 그래서 상황 1,2와 같은 경우에는 모든 주문 내역을 다 보여주고, 상황 3의 경우에는 조건에 따른 주문내역만을 보여주도록 동작해야 할 것 같습니다. 이때 실제 코드에서는 OrderService의 findOrders() 메소드 호출만으로 위 3가지 상황을 모두 커버하고 있는데요, 그렇게 되면 () 상황 1,2의 경우에는 orderList()의 @ModelAttribute orderSearch에 null이 대입되어 모든 주문 내역이 다 조회되는 것 같습니다. 그리고 상황 3의 경우에는 선택한 조건에 따른 orderSearch 객체가 form태그에 의해 요청파라미터로 념겨져와서, orderList()의 파라미터 중 orderSearch가 받아 조건에 따른 주문 내역이 조회되는 것 같은데, 제가 맞게 이해한건지 궁금합니다. 그리고 특히 상황 3의 경우 선택한 회원명or주문상태에 따른 orderSearch객체를, form태그가 생성하여 보내주는 것이 맞는지 궁금합니다. 긴 질문 읽어주셔서 감사합니다!
안녕하세요 강사님! 이번 강의에서 addStock함수와 removeStock 함수를 entity에 작성하셨는데요. 응집력 측면에서 해당하는 entity에 함수에 관련된 로직들을 넣는 건 이해했습니다. 여기서 궁금한건 테스트 코드인데요 저렇게 entity에 로직이 들어가면 해당 로직도 테스트 코드를 작성해야 할거 같거든요. 일반적으로 서비스에 비지니스 로직을 넣고 여러 함수들이 생기면 테스트클래스를 작성해서(ex. SampleService -> SampleServiceTest) 각 함수들을 테스트하는 테스트 코드를 짜는데요. 단위테스트를 할 때 외부 디펜던시(ex. db 등)를 끊고 해당 기능만 테스트 하는게 좋다고 배웠습니다. 그럼 Service에 있는 함수는 함수대로 테스트하고, 엔티티에 있는 함수들은 그거대로 또 따로 테스트를 작성해야 할 거 같은데 현업에서는 엔티티도 테스트를 작성하는 건가요? 아래처럼요 public class ItemTest { @Test public void removeStockTest() { //given //when itemEntity.removeStockTest() //then } }
Singleton 패턴을 사용하는 이유를 알고 넘어가야 나중에 응용할 때 도움이 될 거 같아 질문 남깁니다. Find함수가 다소 무겁다고 들었습니다. Managers s_instance 변수를 전역으로 선언해줌으로써 다른 오브젝트에서 Managers Component를 얻기 위해 불러들일 때 Find함수를 사용하는것을 최소화하여 과부화를 줄이기위해 사용하는게 맞을까요? 아니면 singleton 디자인 패턴에 대한 또 다른 사용 이유가 있을까요?
안녕하세요. 학습내용을 복습하던중 질문이 있습니다. <p>DelegatingFilterProxy</p> 와 <p>FilterChainProxy</p> 의 요청 처리 흐름을 <p>DispatcherServlet</p>을 포함하여 설명하는 그림에서 질문이 있습니다. <p>FilterChainProxy</p>가 직접 <p>DispatcherServlet</p>에 요청을 하는 것이 맞나요? 제 생각에는 첨부한 그림과 같은 실행 순서가 되야 할 것 같습니다. <p>FilterChainProxy</p>가 인증 인가 처리를 마친 후 직접 <p>DispatcherServlet</p>에 요청을 날리게 되면 <p>Servlet Container</p>의 필터 Filter 체인 실행에 문제가 있을 것 같습니다.
이거 스크립트 다 따라서 작성해야 하나요 아니면 따로 다운받을 수 있는 곳이 있나요? 영상 보면서 다 따라서 작성해봤는데... 안될꺼라 생각했는데 역시 안되네요. 주피터에서 작성했고 코드를 몇번 더 컴토했는데 잘 안되네요.. 일단 경로 설정부터 이해가 잘 안가네요. 6분15초에 나오는 ckpt 파일이랑 events 파일은 어떻게해서 만들어진건가요? save_path 랑 load_path 를 지정해야하는데 어떤걸 입력해야 하는지 잘 모르겠습니다. 처음부터 끝까지 실행해서 트론시물레이션이 작동되는 영상은 혹시 없는가요?..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 회원 이메일을 사용하여 MemberRepository에서 회원 정보를 조회하는 메서드를 구현해 보았습니다. 해당 이메일의 회원이 DB에 존재하지 않을경우를 고려하여 다음과 같이 Optional로 감싸주었습니다. Transactional(readOnly = true) public interface MemberRepository extends JpaRepository<Member, Long> { Optional<Member> findByEmail(String email); ... } 이 경우 Service 단에서 해당 메서드를 사용할 경우 변수 타입을 Optional<Member>로 선언해 줘야 했습니다. @Transactional public void followFriend(FollowFriendRequest request) { Member requester = getMember(request.getRequesterEmail()); Optional<Member> receiver = memberRepository.findByEmail(request.getReceiverEmail()); log.info("requester: '{}', receiver: '{}'", requester, receiver); if (receiver == null) { throw new MemberEmailNotFound(); } if (requester.hasFriend(receiver) || relationRepository.existsByOwnerEmailAndFriendEmail(request.getRequesterEmail(), request.getReceiverEmail())) { throw new EmailDuplicatedException(request.getReceiverEmail()); } relationRepository.save(new Relation(requester, receiver)); } 이러면 위 코드 마지막 줄의 Relation 생성자 또한 Optional을 포함한 생성자를 추가로 만들어 줘야 하고 이렇게 되면 Relation 엔티티의 receiver 필드값에도 Optional을 씌워줘야 하는 문제가 발생했습니다. 이 경우 Optional을 어떻게 사용하는게 옳은건지 궁금합니다.
안녕하세요! 강의 너무나 잘 듣고 있습니다. public class Settings { private Settings() { } private static class SettingsHolder { private static final Settings INSTANCE = new Settings(); } public static Settings getInstance() { return SettingsHolder.INSTANCE; } } 로드 시점에 관한 질문입니다. getInstance가 호출 될때 SettingsHolder가 JVM에 로드된다고 말씀하셨습니다. 자바는 잘 모르지만, 동적으로 로드가 된다고 해석했습니다. public class Settings { private static final Settings INSTANCE = new Settings(); private Settings() { } public static Settings getInstance() { return INSTANCE; } } 그렇다면 이른 초기화 방식도, 마치 SettingsHolder가 그러하듯, 필요로 할 때 동적으로 로드 될 순 없나요? 필요로 할 때 로드된다면 SettingsHolder를 필요로 하지 않을 테니 말이죠. 그럼에도 불구하고 static inner class를 사용하는 건 반드시 이유가 있을 테니.. 하여 제 나름대로 찾아보고 테스트해 본 결과 자바 파일에 정의된 기본 클래스들은 실행 시 로드됨을 확인했습니다. 모든 클래스가 실행 시 로드되는진 확실하진 않지만 이와 관련된 JVM의 로드 정책에 대해서 간략하게 설명 부탁드립니다. :)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 현재 군인 신분으로 사지방 특성상 차단되어 있는 기능이 좀 있는데 h2.bat이나 윈도우창의 h2 콘솔 모두 켜지지 않는데 이러면 방법이 없는건가요?
안녕하세요, 강의 잘 수강하고 있습니다. 드론 에셋을 가져와서 스크립트를 작성하는 과정에 있는데, 아래와 같은 오류가 발생하여 질문드립니다. CS0246: The type or namespace name 'DroneSetting' could not be found 에러가 발생했는데, 어떻게 해결할 수 있을까요? Unity 버전은 2021.2.16f1 을 사용하고 있으며, ML Agents는 2.0.0-exp.1, ML Agents Extensions는 0.4.0-preview 버전입니다. 코드는 아래와 같습니다. using UnityEngine; using Unity.MLAgents; using Unity.MLAgents.Actuators; using Unity.MLAgents.Sensors; using PA_DronePack; public class DroneAgent : Agent { public PA_DroneController dcoScript; public DroneSetting area; public GameObject goal; float preDist; private Transform agentTrans; private Transform goalTrans; private Rigidbody agent_Rigidbody; public override void Initialize() { base.Initialize(); dcoScript = gameObject.Getcomponent<PA_DroneController>(); agentTrans = gameObject.transform; goalTrans = goal.transform; agent_Rigidbody = gameObject.GetComponent<agent_Rigidbody>(); Academy.Instance.AgentPreStep += WaitTimeInterference; } public override void CollectObservations(VectorSensor sensor) { //거리벡터 sensor.AddObservation(agentTrans.position - goalTrans.position); //속도벡터 sensor.AddObservation(agent_Rigidbody.velocity); //각속도벡터 sensor.AddObservation(agent_Rigidbody.angularVelocity); } public override void OnActionReceived(ActionBuffers actionBuffers) { AddReward(-0.01f); var actions = actionBuffers.ContinuousActions; float moveX = Mathf.Clamp(actions[0], -1, 1f); float moveY = Mathf.Clamp(actions[1], -1, 1f); float moveZ = Mathf.Clamp(actions[2], -1, 1f); dcoScript.DriveInput(moveX); dcoScript.StrafeInput(moveY); dcoScript.LiftInput(moveZ); float distance = Vector3.Magnitude(goalTrans.position - agentTrans.position); if(distance <=0.5f) { SetReward(1f); EndEpisode(); } else if(distance >10f) { SetReward(-1f); EndEpisode(); } else { floar reward = preDist - distance; AddReward(reward); preDist = distance; } } public override void OnEpisodeBegin() { area.AreaSetting(); preDist = Vector3.Magnitude(goalTrans.position - agentTrans.position); } public override void Heuristic(in ActionBuffers actionsOut) { var continuousActionsOut = actionsOut.ContinuousActions; continuousActionsOut[0] = Input.GetAxis("Vertical"); continuousActionsOut[1] = Input.GetAxis("Horizontal"); continuousActionsOut[2] = Input.GetAxis("Mouse ScrollWheel"); } public float DecisionWaitingTime = 5f; float m_currentTime = 0f; public void WaitTimeInterference(int action) { if(Academy.Instance.IsCommunicatorOn) { RequestDecision(); } else { if(m_currentTime >=DecisionWaitingTime) { m_currentTime = 0f; RequestDecision(); } else { m_currentTime += m_currentTime.fixedDeltaTime; } } } } 아울러, 드론 에셋 가져오기 & 오브젝트 추가 강의에서, PA_Drone Axis Input과 PA_Drone Controller도 체크를 할 수 없게 되면서, "The associated script can not be loaded. Please fix any compile erroes and open Prefab Mode and assign a valid script to the Prefab Asset" 이라는 문구가 나오는데, 이 문제는 어떻게 해결할 수 있을지 질문드립니다. 두 오류가 연관이 있을 수도 있겠습니다. 확인해 주시면 감사하겠습니다
안녕하세요! 일대다 패치조인을 진행하게 될시에, 다쪽의 갯수에 맞추어서 데이터가 뻥튀기, 즉 일쪽이 뻥튀기 된다는 사실을 인지하고 있습니다. 위 코드의 진행과정을 알고싶은데요, 위 처럼 일대다 페치 조인으로 데이터가 뻥튀긴 테이블이 완성되고 -> 뻥튀기 된 데이터들이 애플리케이션(메모리)에 올라가고 -> 거기에서 jpa가 이제 List<Order>에 담는것이 맞을까요? 이게 만약 맞다면, 일대다 패치조인시 페이징할때의 위험성과 같이 저것도 다 메모리에 올라가는 상황이 아닌가요?!, 아니면 제가 메모리의 개념을 잘 이해 못하고 있는지.. 답답하네요 ㅠ
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 처음으로 mac 환경에서 프로젝트를 열려고 하는데 이 오류 때문에 진행을 못하고 있네요.. 프로젝트 파일을 다시 삭제하고 열어봐도 pc를 재부팅하고 다시 시작해도 똑같은 오류가 계속 발생합니다. 구글링에 검색해봐도 마땅한 해결방안이 나오지 않아 답답하네요ㅜㅜ 프로젝트 구성도 이상합니다.. 파일을 열때마다 "._java"와 같은 텍스트 파일이 생겨요