묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
video 버튼 만들기에서 Stack 이 잘안됩니다.
import 'dart:io'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:video_player/video_player.dart'; class CustomVideoPlayer extends StatefulWidget { final XFile video; const CustomVideoPlayer({required this.video, super.key}); @override State<CustomVideoPlayer> createState() => _CustomVideoPlayerState(); } class _CustomVideoPlayerState extends State<CustomVideoPlayer> { // 비디오 플레이어 같은 경우 컨트롤러를 사용해서 위젯을 구성해 줘야한다. VideoPlayerController? videoController; @override void initState() { super.initState(); initializeController(); } initializeController() async { videoController = VideoPlayerController.file( File(widget.video.path), // 이미지 피커에서 가져온 XFile 이랑 형식이 같지않아 dart:io 에 File에다가 변경해줘서 넣어준다. ); // 초기화하라 await videoController!.initialize(); setState(() {}); } @override Widget build(BuildContext context) { if (videoController == null) { return CircularProgressIndicator(); } return AspectRatio( // 비율 맞추는 위젯, 옵션 aspectRatio: videoController!.value.aspectRatio, child: Stack(children: [ VideoPlayer( videoController!, ), _Controler(), ]), ); } } class _Controler extends StatelessWidget { const _Controler({super.key}); @override Widget build(BuildContext context) { return Container( color: Colors.black.withOpacity(0.5), child: Row( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ renderIconButton( onPressed: () {}, iconData: Icons.rotate_left, ), renderIconButton( onPressed: () {}, iconData: Icons.play_arrow, ), renderIconButton( onPressed: () {}, iconData: Icons.rotate_right, ), ], ), ); } Widget renderIconButton({ required VoidCallback onPressed, required IconData iconData, }) { return IconButton( onPressed: onPressed, iconSize: 30.0, color: Colors.white, icon: Icon(iconData), ); } }해당 코드 로직입니다.!
-
미해결함수형 프로그래밍과 JavaScript ES6+
flatMap 관련 질문드립니다~
안녕하세요 선생님~~지금까지 모르는거 있어도 그냥 계속 반복해서 보고, log 찍어보면서 해결했는데flatMap 부분에서 도저히 이해 안 가는 부분이 있어서 이렇게 질문드립니다 ㅠㅠ.. 우선 왜 map을 먼저하는지 모르겠습니다..중첩배열을 먼저 평탄화 시켜주고 그 다음 map을 했을때에는 예상치 못한 결과나 에러가 발생하지 않았는데요.map을 먼저 하게 되면 중첩 배열을 받아서 전달된 함수를 실행하는 부분에서 계속 결과값이 이상해 집니다... ㅠㅠ사실 당연한 결과인데 map이든 L.map이든 [1,2,[3,4],[5]] 이런 중첩배열을 받아서 순회를 하고a => a+10 이런 함수를 실행하면 당연히 결과 값이 이상해지는데 선생님 코드에서는 어떻게 제대로 작동 되는 건지 궁금합니다...;;만약 L.flatMap(a => a, [1, 2, [3, 4], [5]]) 이런식으로 하면 그냥 a를 반환만 하니까 중첩배열이 반환 되고 L.flatten 에서 평탄화 되니까 별문제 없는데 a =>a +10 이런식의 함수를 넘겨주면 결과값이 이상해집니다...ㅠ 뭐가 문제 인지 힌트 부탁드립니다~ const curry = fn => (a, ...args) => args.length ? fn(a, ...args) : (...args) => fn(a, ...args); const reduce = (fn, iter, acc) => { if (!acc) { iter = iter[Symbol.iterator](); acc = iter.next().value; } for (const a of iter) { acc = fn(acc, a); } return acc; } const L = {}; L.map = curry(function* (fn, iter) { for (const a of iter) { yield fn(a) } }); const isIterable = (a) => a && a[Symbol.iterator] L.flatten = function* (iter) { for (const a of iter) { if (isIterable(a)) { yield* a } else yield a } } const map = curry((fn, iter) => { const res = []; for (const a of iter) res.push(fn(a)) return res; }) const take = curry((limit, iter) => { const res = []; for (const a of iter) { res.push(a) if (res.length === limit) return res; } return res; }); const go = (...args) => reduce((a, fn) => fn(a), args); const pipe = (f, ...fn) => (...args) => go(f(...args), ...fn); // L.flatMap L.flatMap = curry(pipe( L.map, L.flatten )); const iter = L.flatMap(a => a + 10, [1, 2, [3, 4], [5]]) console.log(...iter) // 결과값 11 12 3 , 4 1 0 5 1 0
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
1.가장 큰 수 질문드립니다
안녕하세요 교수님강의 중 질문이 있어 글 작성드립니다.마지막에 m이 0보다 클 경우 뒤에서 자르셨는데 stack에 저장되는 값이 1번 예제 7823처럼 항상 내림차순은 아니라 다른 방법으로 풀이해야하지 않나요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
플러터 [초보] 쳅터 14의 두번째강의 에서 7분20초대
안녕하세요, 코드팩토리님 질문있습니다!쳅터 14의 두번째강의 에서 7분20초대에 routetwo스크린에서 팝하면 routeone스크린으로 가야하는거 아닌가요? 왜 팝했는데 home스크린으로 가는건가요?답변 부탁드립니다!
-
미해결
JPA 연관관계시 PK id가 숫자가 이어짐
JPA 연관관계를 맺어서 게시글과 댓글을 구현하는데 각 테이블이 1번으로 시작하는게 아니라 이어지는 상황이 생겨서 이게 정상적인가 의문이 들어서 질문을 드립니다. 기능은 제대로 돌아가는데 등록, 수정, 삭제 잘되는데 제가 알기론 id는 auto_increment 기능이면 각자 테이블에서 1번 부터 시작해서 자동증가로 알고있는데 여기는 이어지다 보니 의문이 생겨서 코드@Entity(name = "board") @ToString @Table @Getter @NoArgsConstructor public class BoardEntity extends BaseEntity{ @Id @GeneratedValue @Column(name = "board_id") private Long boardId; private String title; private String contents; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private MemberEntity member; @OneToMany(mappedBy = "boardEntity", cascade = CascadeType.ALL) // 댓글 정렬 @OrderBy("id asc") private List<CommentEntity> comments = new ArrayList<>(); @Builder public BoardEntity(Long boardId, String title, String contents, MemberEntity member, List<CommentEntity> comments) { this.boardId = boardId; this.title = title; this.contents = contents; this.member = member; this.comments = comments; } } @Entity(name = "comment") @Table @Getter @NoArgsConstructor public class CommentEntity extends BaseTimeEnity{ @Id @GeneratedValue @Column(name = "comment_id") private Long id; private String comment; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "board_id") private BoardEntity boardEntity; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private MemberEntity memberEntity; @Builder public CommentEntity(Long id, String comment, BoardEntity boardEntity, MemberEntity memberEntity) { this.id = id; this.comment = comment; this.boardEntity = boardEntity; this.memberEntity = memberEntity; } } @RequiredArgsConstructor @Service @Transactional public class CommentService { private final CommentRepository commentRepository; private final MemberRepository memberRepository; private final BoardRepository boardRepository; // 댓글 작성 public ResponseEntity<?> save(Long boardId, CommentDTO commentDTO, String memberEmail) { MemberEntity findMember = memberRepository.findByMemberEmail(memberEmail); BoardEntity findBoard = boardRepository.findById(boardId) .orElseThrow(EntityNotFoundException::new); List<CommentEntity> commentEntities = new ArrayList<>(); if(findMember != null) { CommentEntity commentEntity = CommentEntity.builder() .comment(commentDTO.getComments()) .boardEntity(findBoard) .memberEntity(findMember) .build(); CommentEntity saveComment = commentRepository.save(commentEntity); commentEntities.add(saveComment); findBoard = BoardEntity.builder() .boardId(findBoard.getBoardId()) .title(findBoard.getTitle()) .contents(findBoard.getContents()) .member(findMember) .comments(commentEntities) .build(); boardRepository.save(findBoard); CommentDTO commentDTO1 = CommentDTO.toCommentDTO(saveComment); return ResponseEntity.ok().body(commentDTO1); } else { return ResponseEntity.notFound().build(); } } // 댓글 삭제 public String remove(Long boardId, Long commentId, String memberEmail) { BoardEntity findBoard = boardRepository.findById(boardId) .orElseThrow(EntityNotFoundException::new); CommentEntity findComment = commentRepository.findById(commentId) .orElseThrow(EntityNotFoundException::new); MemberEntity findMember = memberRepository.findByMemberEmail(memberEmail); boolean equalsEmail = findMember.getMemberEmail().equals(findComment.getMemberEntity().getMemberEmail()); boolean equalsId = findComment.getBoardEntity().getBoardId().equals(findBoard.getBoardId()); if(equalsEmail && equalsId) { commentRepository.deleteById(findComment.getId()); return "댓글을 삭제했습니다."; } else { return "해당 이메일의 댓글이 아닙니다."; } } // 댓글 수정 public ResponseEntity<?> update(Long boardId, Long commentId, CommentDTO commentDTO, String memberEmail) { BoardEntity findBoard = boardRepository.findById(boardId) .orElseThrow(EntityNotFoundException::new); CommentEntity findComment = commentRepository.findById(commentId) .orElseThrow(EntityNotFoundException::new); MemberEntity findMember = memberRepository.findByMemberEmail(memberEmail); boolean equalsEmail = findMember.getMemberEmail().equals(findComment.getMemberEntity().getMemberEmail()); boolean equalsId = findComment.getBoardEntity().getBoardId().equals(findBoard.getBoardId()); List<CommentEntity> commentEntities = new ArrayList<>(); if(equalsEmail && equalsId) { findComment = CommentEntity.builder() .id(findComment.getId()) .comment(commentDTO.getComments()) .boardEntity(findBoard) .memberEntity(findMember) .build(); CommentEntity saveComment = commentRepository.save(findComment); commentEntities.add(saveComment); findBoard = BoardEntity.builder() .boardId(findBoard.getBoardId()) .contents(findBoard.getContents()) .title(findBoard.getTitle()) .member(findBoard.getMember()) .comments(commentEntities) .build(); boardRepository.save(findBoard); CommentDTO returnComment = CommentDTO.toCommentDTO(saveComment); return ResponseEntity.ok().body(returnComment); } else { return ResponseEntity.badRequest().body("일치하지 않습니다."); } } }
-
미해결홍정모의 따라하며 배우는 C언어
3.13 불리언형 질문
b1=0;b1=1;이걸 왜 해줘야 되나요?
-
해결됨친절한 블렌더 - [LV.0] 입문 필수
중급 수업 문의
안녕하세요! 강의 넘 재밌어요ㅎㅎㅎLevel2 중급 수업도 준비 중이신지 궁금해요
-
미해결리눅스 입문 - 개념으로 탄탄히!!
grep 커맨드에 인수 하나만 전달한 경우
안녕하세요 강사님, 질문이 있습니다. grep 커맨드에서 인수 하나만 입력했을 때 그 결과가 무엇을 의미하는지 궁금합니다. 예를들어, 아래와 같이 패턴만 입력하고 file을 입력하지 않은 상태에서 엔터를 누르면, 커서가 아래에 위치하며 아무일도 일어나지 않고 있습니다.grep "startup" | <- 커서가 위치하며 아무런 일도 일어나지 않음나머지 인수를 입력 받길 기다리는 건가요?여기서 Ctrl + C를 누르면 원래 프롬프트로 돌아오는 것은 확인했습니다.저 결과는 어떤 것을 의미하는지 궁금합니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
카페 가입 관련 문의
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의중에 Rookiss 네이버 카페를 보여주시는데, 해당 카페에 가입하기 위한 조건이 있을까요?
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
singleton pattern
싱글톤 패턴으로 클래스 작성시 private static Company company = new Company();라고 작성을 하였는데 프로그램 실행 부터 메모리에 올라가는 static 필드가 바로 인스턴스를 생성하는건가요? static 필드와 인스턴스의 생성 시점이 충돌하지는 않나요?클래스 로딩과 static 필드 중 어떤게 먼저 메모리에 잡히는지 궁금합니다.
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
구조체 전방선언
강의에서는 구조체를 게임인스턴스 헤더에 바로 만들어서상관없는데 나중에 따로 헤더파일을 만들어서 구조체를 관리하게 되면이거도 다른 곳에서 쓸 때 전방선언을 해줘야 하는건가요? 그렇다면 TObjectPtr 을 써서 전방선언을 해야 하나요? 아니면 구조체는 간단하니까 바로 헤더파일을 인클루드 하면 되나요? 초보자라 이 질문이 맞는 질문인지도 모르겠네요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
springmvc/old-controller
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 똑같은 코드인데 어떤 컴퓨터에서는 되고 다른 컴퓨터에서는 안되는 이유가 뭔지 궁금합니다. https://drive.google.com/file/d/11Zuk3zBvm9QWWpyIQeAWwWIwUGdSc7Bk/view?usp=sharing 이게 제 코드인데 강사님 코드를 다운 받고 돌려도 localhost:8080/index.html 조차 에러가 뜹니다. 뭐가 문제일까요. 저번에 질문했지만 문제가 해결이 되지 않아 한번 더 질문합니다. 감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
삭제하기 기능 구현 레퍼런스 코드는 없을까요
게시글 상세 화면에서 삭제하기 기능을 구현해주세요.이부분에 대한 레퍼런스 코드가 깃허브에 등록된 내용에는 나오지 않는데 알고 싶습니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
메모리 초과 관련 문제
안녕하세요, 메모리 초과 관련 문제가 생겨서 질문드립니다.제가 생각한 알고리즘을 설명드리자면2중 벡터 fire의 경로를 구합니다. (bfs)2중 벡터 player의 경로를 구합니다. (bfs)fire와 player의 각 요소를 비교하여 player의 요소가 작은 경우엔 유지, 아닌 경우엔 -1로 값을 덮어씌웁니다.최종적으로 vector<vector<int>> player는 다음과 같은 값을 갖습니다.-1 -1 -1 2-1 -1 -1 1-1 -1 1 0-1 -1 -1 -1해당 player를 다시 bfs로 순회합니다. (시작점은 player의 초기 위치인 0 지점) -> 이걸 하는 이유는 혹여나 player의 길이 fire에 의해 끊기는 경우가 존재할 수 있으므로 입니다. (하지만 이런 경우는 발생하지 않는 것 같습니다.)마지막으로 player가 갈 수 있는 최종 길만 남게되고, 가장자리의 4변에서 -1이 아닌 최소값을 찾습니다.이런 알고리즘을 시행했는데 메모리 초과가 뜹니다. 메모리 초과와 관련해서는 visual studio에서 어떻게 디버깅을 해야할지 잘 모르겠습니다. 단순히 생각해보면 각 2차원 벡터는 최대 1000*1000*4byte(int)=4MB의 크기를 갖고, deque는 아마 최대로 해도 4MB 이하의 크기를 갖을 것 같은데 문제의 256MB가 왜 초과가 되는지. 모르겠습니다.아래는 해당 코드의 링크입니다.http://boj.kr/6145ffa1c073417ab06e3a7e86afe533 강의를 듣고나서는 코드를 수정하여 player의 경로를 구할 때, 미리 구해둔 fire의 경로와 비교하여 fire가 선점한 경우엔 갈 수 없는 경로로 표시하고, 순서 5의 과정을 삭제했습니다. 이러니 해결이 되긴하는데.. 이게 왜 되는건지는 모르겠습니다. 해당 코드는 메모리 10872KB를 썼다고 나옵니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요@RequestBody와 @ModelAttibute차이를 제대로 이해했는지 궁금하여 여쭤봅니다.서버로 데이터를 전달하는 방법은 3가지방법이있는데 쿼리파라미터 시에는 get방식 @RequestParam 사용HTML Form 시에는 get, post 다 지원 @ModelAttibute 사용message body 시에는post방식 @ReqeustBody 로 받아서 사용하는것이 맞을까요?각 전달 방법3가지에 get/post방식 매핑과 어노테이션 매칭이 잘 되엇는지 궁금합니다. 그리고 RequestParam , ReqeustBody 를 컨트롤러의 같은 메소드에 사용가능할까요?ex ) public void test(@RequestParam int id, @ReqeustBody Body body)같이 사용가능하다면 왜 가능한지도궁금합니다ㅜㅜ
-
해결됨디자인 시스템 with 피그마
타이포그래피 연결해제 표시
다른분이 연결해제 관련 질문을 올리긴 하셨는데 json 파일을 따로 안올리셔서 같이 첨부드립니다 ㅠ.ㅠ 왜 연결해제와 같은 표시가 뜨는 걸까요..?json 입니다.{ "140": { "value": "140%", "type": "lineHeights" }, "150": { "value": "150%", "type": "lineHeights" }, "160": { "value": "160%", "type": "lineHeights" }, "spacing": { "6": { "value": "{spacing.baseSpacing} *1.5", "type": "spacing" }, "8": { "value": "{spacing.baseSpacing} *2", "type": "spacing" }, "10": { "value": "{spacing.baseSpacing} *2.5", "type": "spacing" }, "12": { "value": "{spacing.8} + {spacing.baseSpacing}", "type": "spacing" }, "16": { "value": "{spacing.12} + {spacing.baseSpacing}", "type": "spacing" }, "20": { "value": "{spacing.16} + {spacing.baseSpacing}", "type": "spacing" }, "24": { "value": "{spacing.20} + {spacing.baseSpacing}", "type": "spacing" }, "28": { "value": "{spacing.24} + {spacing.baseSpacing}", "type": "spacing" }, "32": { "value": "{spacing.28} + {spacing.baseSpacing}", "type": "spacing" }, "36": { "value": "{spacing.32} + {spacing.baseSpacing}", "type": "spacing" }, "40": { "value": "{spacing.36} + {spacing.baseSpacing}", "type": "spacing" }, "44": { "value": "{spacing.40} + {spacing.baseSpacing}", "type": "spacing" }, "48": { "value": "{spacing.44} + {spacing.baseSpacing}", "type": "spacing" }, "52": { "value": "{spacing.48} + {spacing.baseSpacing}", "type": "spacing" }, "56": { "value": "{spacing.52} + {spacing.baseSpacing}", "type": "spacing" }, "60": { "value": "{spacing.56} + {spacing.baseSpacing}", "type": "spacing" }, "64": { "value": "{spacing.60} + {spacing.baseSpacing}", "type": "spacing" }, "baseSpacing": { "value": "4", "type": "spacing" } }, "black": { "value": "#000000", "type": "color" }, "white": { "value": "#ffffff", "type": "color" }, "blue": { "100": { "value": "#d4e2fc", "type": "color" }, "200": { "value": "#a9c5f9", "type": "color" }, "300": { "value": "#7da8f7", "type": "color" }, "400": { "value": "#528bf4", "type": "color" }, "500": { "value": "#276ef1", "type": "color" }, "600": { "value": "#1f58c1", "type": "color" }, "700": { "value": "#174291", "type": "color" }, "800": { "value": "#102c60", "type": "color" }, "900": { "value": "#081630", "type": "color" } }, "red": { "100": { "value": "#f9d1cc", "type": "color" }, "200": { "value": "#f3a399", "type": "color" }, "300": { "value": "#ed7566", "type": "color" }, "400": { "value": "#e74733", "type": "color" }, "500": { "value": "#e11900", "type": "color" }, "600": { "value": "#b41400", "type": "color" }, "700": { "value": "#870f00", "type": "color" }, "800": { "value": "#5a0a00", "type": "color" }, "900": { "value": "#2d0500", "type": "color" } }, "yellow": { "100": { "value": "#fff2d9", "type": "color" }, "200": { "value": "#ffe6b4", "type": "color" }, "300": { "value": "#ffd98e", "type": "color" }, "400": { "value": "#ffcd69", "type": "color" }, "500": { "value": "#ffc043", "type": "color" }, "600": { "value": "#cc9a36", "type": "color" }, "700": { "value": "#997328", "type": "color" }, "800": { "value": "#664d1b", "type": "color" }, "900": { "value": "#33260d", "type": "color" } }, "green": { "100": { "value": "#cde7da", "type": "color" }, "200": { "value": "#9bcfb6", "type": "color" }, "300": { "value": "#68b891", "type": "color" }, "400": { "value": "#36a06d", "type": "color" }, "500": { "value": "#048848", "type": "color" }, "600": { "value": "#036d3a", "type": "color" }, "700": { "value": "#02522b", "type": "color" }, "800": { "value": "#02361d", "type": "color" }, "900": { "value": "#011b0e", "type": "color" } }, "accent": { "value": "{blue.500}", "type": "color" }, "negative": { "value": "{red.500}", "type": "color" }, "warning": { "value": "{yellow.500}", "type": "color" }, "positive": { "value": "{green.500}", "type": "color" }, "gray": { "100": { "value": "#e1e1e1", "type": "color" }, "200": { "value": "#c4c4c4", "type": "color" }, "300": { "value": "#a6a6a6", "type": "color" }, "400": { "value": "#898989", "type": "color" }, "500": { "value": "#6b6b6b", "type": "color" }, "600": { "value": "#565656", "type": "color" }, "700": { "value": "#404040", "type": "color" }, "800": { "value": "#2b2b2b", "type": "color" }, "900": { "value": "#151515", "type": "color" } }, "positiveTransparent": { "value": "#0488481a", "type": "color" }, "negativeTransparent": { "value": "#e119001a", "type": "color" }, "scale": { "value": "1.333", "type": "sizing" }, "default": { "value": "16", "type": "fontSizes" }, "heading": { "S": { "value": "{default} / {scale}", "type": "fontSizes" }, "M": { "value": "{default}", "type": "fontSizes" }, "L": { "value": "{heading.M} * {scale}", "type": "fontSizes" }, "XL": { "value": "{heading.L} * {scale}", "type": "fontSizes" }, "XXL": { "value": "{heading.XL} * {scale}", "type": "fontSizes" }, "XXXL": { "value": "{heading.XXL} * {scale}", "type": "fontSizes" } }, "label": { "S": { "value": "{default} / {scale}", "type": "fontSizes" }, "M": { "value": "{default}", "type": "fontSizes" }, "L": { "value": "{heading.M} * {scale}", "type": "fontSizes" }, "XL": { "value": "{heading.L} * {scale}", "type": "fontSizes" }, "XXL": { "value": "{heading.XL} * {scale}", "type": "fontSizes" } }, "paragraph": { "S": { "value": "{default} / {scale}", "type": "fontSizes" }, "M": { "value": "{default}", "type": "fontSizes" }, "L": { "value": "{heading.M} * {scale}", "type": "fontSizes" }, "XL": { "value": "{heading.L} * {scale}", "type": "fontSizes" } }, "pretendard": { "value": "Pretendard", "type": "fontFamilies" }, "bold": { "value": "Bold", "type": "fontWeights" }, "semibold": { "value": "SemiBold", "type": "fontWeights" }, "\bregular": { "value": "Regular", "type": "fontWeights" }, "Heading": { "XXXL": { "value": { "fontFamily": "{pretendard}", "fontWeight": "{bold}", "lineHeight": "{140}", "fontSize": "{heading.XXXL}", "letterSpacing": "{letterSpacing.0}", "paragraphSpacing": "{paragraphSpacing.0}", "paragraphIndent": "{paragraphIndent.0}", "textCase": "{textCase.none}", "textDecoration": "{textDecoration.none}" }, "type": "typography" }, "XXL": { "value": { "fontFamily": "{pretendard}", "fontWeight": "{bold}", "lineHeight": "{140}", "fontSize": "{heading.XXL}", "letterSpacing": "{letterSpacing.0}", "paragraphSpacing": "{paragraphSpacing.0}", "paragraphIndent": "{paragraphIndent.0}", "textCase": "{textCase.none}", "textDecoration": "{textDecoration.none}" }, "type": "typography" } } }추가로 import 할 때 이런 표시도 뜹니다.
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
@Entity != RDB Table에 대한 질문입니다.
예전에 조영호님의 '오브젝트' 서적을 읽고 "어떻게 비즈니스 모델을 더 변경에 부드럽게 설계할 수 있을까?"에 고민을 했습니다. 그때의 기억으로는 "역할은 책임을 위한 최소한의 정보만 가지고 있자"라고 제가 이해를 했고 @Entity가 달린 class를 "역할"로 보고 코드 작성을 하니 1개의 RDB Table이 2개 이상의 Entity Class로 매핑이 되었습니다.평소에 1개 Entity Class가 1개 Table와 매핑하는 것과 달라 괴리감이 들었습니다. 핵사고날 아키텍쳐를 적용하면 비즈니스 모델과 JPA의 Entity를 분리할 수 있지만 팀원들과의 합의도 필요해서 적용할 수 없었고 주니어라 해당 기술 도입으로 생산성이 올라갈 것이라고 장담할 수도 없었습니다. 두서가 없이 말이 많았는데 궁금한 점은!"RDB의 1개 Table을 2개 이상의 Entity로 매핑해서 운영을 하는게 보편적인 방식인가요?" 입니다. ++ 개인적인 질문입니다만 객체의 협력 관계를 먼저 설계하는 것과 DB 설계하는 것 어떤 것이 우선인가요?
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
deployment 롤링 업데이트
deployment 를 삭제하고 다시 apply 해야 하는 이유가 뭘까요?? 그렇게 되면 중간에 삭제되고 다시 생성되기 이전에 중단이 발생하지 않나요??디플로이먼트는 변경 안해도 이미지가 바뀌면 apply 쳤을때 기본 전략으로 롤링 업데이트로 다른 리플리카 셋으로 생성되는걸로 들은적이 있는 것 같아서요!
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
리액트 프로젝트 생성시 질문
npx-create 시 에러나서user/Appdata/Roaming 경로 아래 npm폴더를 생성하고 재수행했더니 작동했는데 이유가 궁금합니다. 그리고 강사님께서 하시는 방법으로 바꿀수 있는 방법은 없을까요...? 매번 appdata로 가서 폴더 선택하는것이 번잡스러워서요...
-
미해결언리얼 엔진4 입문 (C++ 기반)
유니티 vs 언리얼 강의 중 의문점
개발쪽과 전혀 관련이 없는 분야에서 일하다가 언리얼을 배우게 되어서 기초적인 지식이 없다 보니 이해가 안되고 왜 이런걸 입력해주는지에 대한 기본지식이 없습니다.강의중 액터를 생성 후 비쥬얼 스튜디오에서 헤더파일에서 기본적으로class ~~public:~~protected:~~public:~~private: (강의중 생성)이렇게 되어 있는데 class는 어떠한 class인지에 대한 내용인 것 같은데 그 외 public:, protected:, private: 이런 것은 의미가 있어서 구분되어 있을 것인데 왜 구분되어있고 무슨 의미를 가지는지 모르겠습니다. 그리고 CPP에서Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MESH")RootComponent = Mesh;Static ConstructorHelper::FobjectFinder<UStaticMesh>~~~위와 같은 것의 용어가 가지는 의미와 언리얼에서 어떻게 반영 되어 나타나는지 그리고 문법? 구조?는 모두 외워서 입력하는 건지 등이 궁금합니다.