묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
Json 파싱 형식
제이슨을 파싱하는 과정중에서 int, class 형식으로 가져오고 있는데 string, class 형식으로도 가져오게 할 수 있나요?? [Serializable] public class ValueDataLoader : ILoader<int, ValueData> { public List<ValueData> datas = new List<ValueData>(); public Dictionary<int, ValueData> MakeDict() { Dictionary<int, ValueData> dict = new Dictionary<int, ValueData>(); foreach (ValueData Data in datas) dict.Add(Data.ID, Data); return dict; } }
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
어플리케이션 서비스와 도메인 서비스의 구성
안녕하세요.OSIV 강의 후반부 내용에서 규모가 비교적 큰 프로젝트에서는 도메인 계층과 더불어 그 앞단에 애플리케이션 계층을 추가하는걸 고려해보라고 말씀주신 내용이 있었는데요. 이게 제가 찾고 있는 해답이 아닐까 싶어 조금 더 자세히 알고 싶어 질문 드립니다. 질문이 조금은 장황해도 너그러히 이해주시면 감사드리겠습니다. 최근에 개인 프로젝트를 수행해보면서 제가 학습해온 개념들(JPA, DDD, MSA)이 중점적으로 다루는 내용이 다르다보니 프로젝트 구성에서 혼란을 겪어오고 있습니다.현재 개인 프로젝트 패키지 구조는 제가 느끼기에 가장 와닿았던 controller - application - domain - repository로 나뉘어 개발하고 있습니다.이때 application 계층의 역할은 하나의 요구사항(가입, 해지 등)을 해결하기 위해 필요한 하위 계층의 애플리케이션 서비스들을 호출하는 facade를 구성합니다. 또, domain에서는 도메인 객체와 더불어 해당 도메인의 애플리케이션 서비스를 통해 비즈니스적 처리를 추상화하여 표현하고, 데이터 핵심 데이터 처리를 repository에 위임하도록 구성했습니다.다만 이해가 안 갔던건 트랜잭션을 처리 계층에 대한 내용인데요. 제가 본 msa 도서에서는 facade에서 수행되는 애플리케이션 서비스 각각이 서로 다른 도메인 처리이므로 application 계층이 아닌, domain 메소드 단위로 트랜잭션이 구성되어야한다더라구요.그런데 사실 제가 개발하고 있는 프로젝트는 MSA 구조가 아니고, 여러 에그리거트가 복합된 구조이기에 위 구조와 사상을 가지고 개발하기 어렵다는 생각이 들었습니다. 또한, 서로 다른 도메인의 애플리케이션 서비스간에 호출관계에서도 어려움을 겪었는데요.예를 들어, 두 user가 하나의 group을 구성하는 서비스를 만들 때도 groupService라는 group에 종속된 애플리케이션 서비스에서 두 사용자 정보를 불러오는 userService 주입하자니, 서로 상이한 서비스간에 불필요한 의존성이 생기고, 같은 레벨의 서비스를 참조하는 것이 어색하다고 느껴졌습니다. 그래서 facade 계층에서 두 서비스를 주입하여 그룹생성 절차를 처리하자니 한 트랜잭션에 처리되어야한다고 생각하는 그룹 생성 처리 절차에서 회원, 그룹 서비스의 트랜잭션이 분리되니 이상하다고 생각했습니다. 드디어 본격적인 질문인데요. 혹시 영한님께서 말씀하신 애플리케이션 계층이 이렇게 도메인에 종속된 두 개 이상의 서비스가 함께 쓰여야 할 때 쓰이는 것이 맞을까요?맞다면 controller - application - domain - repository 의 계층구조에서 facade가 들어가던 application에 해당 복합(?) 서비스를 구현하고, 해당 서비스에 대한 dto객체정도들만 구현하면 되는걸까요? 3. 굳이 어플리케이션 계층이 필요로 하지않은 하나의 도메인에만 종속된 기능들을 호출구조를 어떻게 가야할까요?애플리케이션 계층을 도입한 상황에서 controller에서 domain 계층을 바로 호출하는 것은 일관성이 없어보이고, 또 일관성을 맞추기위해 application 계층에서 도메인 계층으로 BYPASS하는 객체를 만드는 것도 비효율적으로 보이긴합니다. 각각의 케이스에 어떻게 가는게 좋을까요?
-
미해결Vue 3 중급 - Composition API
composition api 재사용성에 대한 문의
안녕하세요. 강사님 말씀대로 todo app 에서는 composition API의 재사용성 장점을 느끼기가 어려운데요.중대형 사이즈의 프로젝트에서 options API 방식과 비즈니스 로직만 별도 .js 파일로 분리해 사용하는 것이 가독성과 재사용성 측면에서 더 나은 선택이지 않을까 생각이 됩니다.강사님께서 Composition API를 적용한 경험과 Options API와 비즈니스 로직을 .js 파일로 구성하는 방식에 대한 견해를 알고 싶습니다.감사합니다.
-
해결됨디자인 시스템 with 피그마
Default 값을 16 에서 14로 변경했는데.
변화가 없습니다.오른쪽 네이티브 시스템과 화면에 폰트에 변화가 없습니다. Token Studio for Figma의 값들은14에 맞게 변화하였습니다.
-
해결됨독하게 시작하는 C 프로그래밍
달팽이 숙제 이렇게 풀면 의도와 다를까요?
안녕하세요 강의 재밌게 잘 보고있는 1인입니다~숙제 설명듣기전에 풀어봐야겠다고 해서 3시간 걸려 풀었습니다. 설명듣고나니 방법이 좀 다른거같은데, 의도에 좀 벗어난 것일까요? 또한 포문마다 조건이 달라 이해하기 더 어려운 코드가 된건 아닌지에 대해서도 널널한개발자님의 의견이 궁금합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션이 삭제되는 시점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 강의 잘 보고 있습니다. 세션이 삭제되는 시점에 대해서 의문점이 생겨서 질문드립니다.영한님께서 HTTP는 비연결성이기 때문에 서버에서 세션데이터를 언제 삭제해야하는지 모른다고 하셨습니다. 사용자의 마지막 요청을 기준으로 30분 이후에 세션이 삭제된다고 했을 때 서버는 30분이 지났는지 어떻게 아는건가요? 제가 생각했을 때는 서버에서 자체적으로 계속 30분이 지났는지 확인을 하거나 사용자 요청이 들어올 때 먼저 30분이 지났는지 확인하고 세션을 삭제해줄 수 있을 것 같습니다.스프링에서는 어떤 방법으로 확인하는지 궁금합니다!
-
해결됨키샷 입문•초급 : 극 사실적인 제품 이미지를 위한 키샷 렌더링 & 후보정 Part.1
따로 모델링 된 파트 여러개를 키샷에서 하나의 화면에서 열 수 있나요 ?
안녕하세요,제가 솔리드웍스를 써서 레몬 스퀴저 두개 따로 컵 따로 모델링했는데, 혹시 키샷에서 하나의 화면에서 다 같이 열어 볼 수 있나요 ? 우선 방법을 모르겠어서, 솔리드웍스 어셈블리에서 한 화면에넣고 불러오긴했는데...
-
해결됨Next + React Query로 SNS 서비스 만들기
개념이 잘서지 않아서, ssr/csr관련 seo 문제
어떤 답변중 csr로 해도 metadata 설정으로 seo 가 가능하다 본듯합니다. ssr이 seo에 유리하다하여 ssr방식으로 해보려 한 이유도 일부있는데 csr로도 충분히 커버가 가능한것인지요?선생님의 의견여쭙고 싶습니다. 감사합니다!
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
플러터 무한 로딩 현상
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 플러터 빌드 실행 시 무한 로딩 현상이 있습니다. 플러터 초급 강의의 영상통화 파트입니다. 혹시 어느 부분이 문제일까요?코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
SearchToRemove와 RemoveNode가 분리되어야 할 필요가 있을까요?
RemoveNode를 직접 먼저 구현한 후 강의를 듣게 되었는데요,저는 RemoveNode 안에 Search하는 코드를 통합해서 짰는데 SearchToRemove가 RemoveNode를 실행시키기 위해서만 필요하다면 굳이 분리를 해야 할까 하는 의문이 들었습니다.하나의 함수는 하나의 동작만 실행해야 해서 분리가 된 것일까요? 아니면 SearchToRemove가 나중에도 사용이 될 가능성이 있어서 분리된 것일까요?제가 작성한 코드를 첨부합니다. void RemoveNode(const char* pszName) { USERDATA* pTmp = g_pHeadNode; USERDATA* previousNode = NULL; bool isFound = false; // 노드 찾기 while (pTmp != NULL) { if (strcmp(pTmp->name, pszName) == 0) { isFound = true; break; } previousNode = pTmp; pTmp = pTmp->pNext; } // 노드 찾기 실패 if (isFound == false) { printf("\"%s\" : Not Found, remove failed.\n", pszName); return; } // 헤드인 경우 if (g_pHeadNode == pTmp) { g_pHeadNode = pTmp->pNext; free(pTmp); printf("\"%s\" : Found, remove successed.\n", pszName); return; } // 헤드가 아닌경우 previousNode->pNext = pTmp->pNext; free(pTmp); printf("\"%s\" : Found, remove successed\n", pszName); }
-
해결됨독하게 시작하는 C 프로그래밍
(섹션13- 교차와 달팽이숙제) 교차 예시 관련해 오설명있는 거 같습니다.
C공부 시작하고 강의 정말 재밌게 듣고 있는 수강자입니다~영상 9분 34초입니다.교차 예상 결과값 아래이지만1 2 3 4 510 9 8 7 6 ....강의에선 아래와 같이 값이 나왔습니다.1 4 3 2 510 7 8 9 6 ... flag를 이중 반복문 안쪽에 기입해서 생긴 오류였던거 같습니다.다른 분들 헷갈리지 않으시길 바라며 남겨봅니다.오류가 맞나요? 아니면 제 오해인지요?확인해주시면 정말 감사하겠습니다~
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
SetInfo를 이용한 아이템 이름 변경
public override void Init() { Bind<GameObject>(typeof(GameObjects)); Get<GameObject>((int)GameObjects.ItemNameText).GetComponent<Text>().text = _name; Get<GameObject>((int)GameObjects.ItemIcon).BindEvent((PointerEventData) => { Debug.Log($"아이템 클릭! {_name}"); }); } public void SetInfo(string name) { _name = name; }UI_Inven_Item에 있는 내용인데UI_Inven에서 invenItem.SetInfo("집행검 어쩌구");를 하면 UI_Inven_Item의 _name만 바꿔줬을 뿐인데어떻게 Component의 값 까지 바뀌는거죠?제가 생각할 떄는 SetInfo안에Get<GameObject>((int)GameObjects.ItemNameText).GetComponent<Text>().text = _name;이 코드가 필요한거 같은데어떻게 ItemNameText가 업데이트가 되는지 모르겠습니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
영속성 컨텍스트 질문
9:57 보시면51 라인 Account account = accountRepository.findByEmail(email); 이 순간 account 객체는 Persistent 상태이고,이 코드 이후로 account 이건 다시 detach 상태가 되는데63라인 accountService.completeSignUp(account);이 코드로 인하여 다시 Persistent 로 상태가 만들어진다고 생각하면 될까요 ?? (왜냐하면 accountService.completeSignUp(account);에는 트랜잭션어노테이션이붙어있어서)
-
해결됨코딩테스트 [ ALL IN ONE ]
동적계획법 (3) 문제로 배우는 DP
탑다운 방식인데 위에 그림처럼 바텀업처럼 문제를 아래서 부터 해결해 나가서요.강의에서는 피보나치가 탑다운 방식으로 푸는 경우가 있는데 바텀업 방식처럼 문제를 아래서(위에 그림 빨간색표시처럼) 부터 해결한다고 하셨는데요. 혹시 계단 문제도 피보나치처럼 탑다운 방식인데 문제를 아래서 부터 해결해나가는 스타일인건가요?문제를 읽고 탑다운으로 풀지 바텀업으로 풀지 어떻게 알아요?
-
미해결코딩테스트 [ ALL IN ONE ]
ㅇ
탑다운 방식인데
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java.lang.NullPointerException 에러
null 관련된 에러인 것 까진 파악했는데 어디가 잘못된건지 감이 안잡히네요ㅠㅠ
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
안녕하세요
안녕하세요맥 실리콘칩 m2 를 사용하고 있습니다.ssh server 를 설치하려고 docker pull edowon0623/docker-server:m1 설치하고 실행했는데 docker 상태가 계속 exit가 나옵니다 원인을 알 수 있을가요?docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host edowon0623/docker-server:m1 /usr/sbin/init명령어를 사용하였습니다
-
해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
리스트뷰에 이미지 업로드
안녕하세요 강의를 다 듣고 추가로 구현하고 싶은것이 있어서 질문 남겨요!게시글을 작성하고 입력버튼을 누르면 원래는 제목,내용,시간 부분만 자취톡부분에 나오게 구현하셨는데아래처럼 이미지까지 추가해서, 게시글을 작성했을때 선택했던 이미지와 똑같은 이미지를 리스트뷰에도 똑같이 표현하고 싶습니다 즉, 게시글을 작성하고 입력버튼을 눌렀을때 나오는 리스트뷰에 내가 작성한 제목,내용,시간뿐만아니라 이미지까지 표현하고 싶습니다! 그래서 제가 구현해본 것이 BoardModel의 데이터모델에 url을 추가해줬고package com.example.mysololife.board data class BoardModel( val title : String = "", val content : String = "", val uid : String = "", val time : String = "", val url : String = "" // 이미지 url ) BoardWriteActivity에서 아래와 같이 url데이터도 일단은 빈값으로 추가해주었습니다// 데이터 집어넣기 FBRef.boardRef .child(key) .setValue(BoardModel(title,content,uid,time,"")) 그리고 BoardListLVAdapter에서 내가 선택한 이미지가 해당레이아웃에 적용되게 아래와 같이 코드를 짜주었습니다// 내가 넣어준 이미지가 imageView에 적용되게 imageView에 선언 val imageView = view?.findViewById<ImageView>(R.id.imageView) // 이미지 보이게 적용 Glide.with(context) .load(boardList[position].url) .into(imageView!!) 그래서 이렇게 코드를 작성하고 파이어베이스를 봤더니 이런 구조로 나왔습니다현재까지는 url부분에 아무것도 없어서 이미지가 뜨지 않지만이 url부분에 파이어베이스 스토리지에 있는 이 이미지url을 복사해서 붙여넣으니깐 리스트뷰에 이미지가 잘 뜨는것을 확인할수있었습니다 그래서 제 생각에는 이 url을 넣는 부분에 파이어베이스에 업로드해논 이미지url을 넣어줘야될것같은데이걸 어떻게 하는지 모르겠습니다....파이어베이스 스토리지 공식문서 (url을 통해 데이터 다운로드) 부분을 참고해도 어느 부분에다가 집어넣어야되는지 감도 안오고 잘 되지 않아서 질문드립니다....// 데이터 집어넣기 FBRef.boardRef .child(key) .setValue(BoardModel(title,content,uid,time,"")) 이미지를 추가하는 코드를 제외하고는 강의에 나온 코드들과 전부 동일합니다!
-
해결됨개발자를 위한 쉬운 도커
Windows 환경에서 섹션9 도커 컴포즈 - Leafy 도커 컴포즈 실행 오류 관련 문의
안녕하세요, 먼저 좋은 강의 만들어주셔서 감사합니다 ^^ 강의&실습을 진행하다가 Windows 10 Home 환경에서 실습 예제가 잘 실행되지 않는 문제가 있어서 문의드립니다. easydocker/leafy에서 07-compose 브랜치(docker-compose.yml 완성된 브랜치)로 체크아웃 후, docker compose up -d로 도커 컴포즈를 실행하면 front 쪽에서 아래와 같은 오류가 발생하고 컨테이너 실행이 되지 않습니다. exec /usr/local/bin/docker-entrypoint.sh: no such file or directory 혹시 해결방법이 있을지 문의드려요~ 윈도우 개행문자 처리 관련 문제일 것 같아서 git config --global core.autocrlf true 설정 후 다시 git clone을 받아도 안되고 구글링을 해봐도 딱히 해결방법이 안나오네요 ㅠㅠ 이미 완성된 07-compose 브랜치로 실행했을 때도 동작하지 않긴 하지만 혹시나 해서 docker-compose.yml & 프론트쪽 Dockerfile 부분 첨부드립니다. 감사합니다.
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
spine을 animator로 교체
안녕하세요 3주 차 코드로 공부하고 있는 중 spine 을 animator controller로 교체하려고 하는데요. Creature.cs 의public virtual void SetInfo(int templateID) { . . SkeletonAnim.skeletonDataAsset = Managers.Resource.Load<SkeletonDataAsset>(CreatureData.SkeletonDataID); SkeletonAnim.Initialize(true); // Register AnimEvent if (SkeletonAnim.AnimationState != null) { SkeletonAnim.AnimationState.Event -= OnAnimEventHandler; SkeletonAnim.AnimationState.Event += OnAnimEventHandler; }부분에서 SkeletonAnim.skeletonDataAsset = Managers.Resource.Load<SkeletonDataAsset>(CreatureData.SkeletonDataID); 는캐릭터 간 다른 애니메이션을 사용하기 위해 json에서 읽어온 animator 파일을 지정하는 걸로 이해하고Animator Controller로 교체했는데요.BaseObject.cs public Animator SkeletonAnim { get; private set; }Creature.cspublic virtual void SetInfo(int templateID) { . . SkeletonAnim.runtimeAnimatorController = Managers.Resource.Load<RuntimeAnimatorController>(CreatureData.SkeletonDataID); // Animator Controller로 교체 // Register AnimEvent if (SkeletonAnim.AnimationState != null) { SkeletonAnim.AnimationState.Event -= OnAnimEventHandler; SkeletonAnim.AnimationState.Event += OnAnimEventHandler; } SkeletonAnim.AnimationState.Event -= OnAnimEventHandler;SkeletonAnim.AnimationState.Event += OnAnimEventHandler;이 부분은 왜 사용하는지 어떻게 수정해야 되는지 모르겠습니다.