이야기를 나눠요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 번외편: AWS로 시작하는 서버 운영
최근 aws 해킹 후 코인채굴의 사례가 많아 aws가입시 mfa등록을 꼭하시기 바랍니다
강의 수강 중 정보공유의 차원에서 업로드합니다 최근 aws 해킹 후 코인채굴의 사례가 많아 aws가입시 mfa등록을 꼭하시기 바랍니다
-
이거 안해보신분 한번씩 해보세요ㅎ
숨은 돈 찾아가라고 요새 계속 뉴스 나와서 한번 해봤네요 전 없는지 알았는데 15만 얼마 나왔슴다ㅋㅋ 1,2분이면 해요. 한번씩해보세요ㅎ 네이버에 ‘내보험찾기’ 치고 들어가시면 핸드폰으로도 되네요. 꽁돈아닌 꽁돈이구만요ㅋㅋ 방법은 이글 참고하세요ㅎ https://blog.makewiselife.com/menuldx=post/main/13400417
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
청취강의 순서 질문이요
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 순서에 따라 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 를 먼저 들어보고 저랑 강의가 맞는다고 생각하면 스프링 핵심 원리 - 기본편 수강하려고 하는데요. 강의를 들으면 들을수록 Assertions, optional 같은 생소한 것들이 나와서 이해도 잘 안가고, 아무래도 느낌상 boot니까 이것들은 최신 기술인건가...라는 생각이 들어서요. 입사한지 얼마 안되었지만 저희회사는 전자정부프레임워크를 쓰기 때문에 안정성 때문인지 조금은 올드하고 안정적인 것만 쓰는것같은데요 그래서 지금 강의를 들어도 실무는 boot가 아니라서 쓰지 않을 것 같은 느낌이 드는데, 이 강의 패스하고 바로 스프링 기본편 강의 들어도 무리가 없을까 궁금합니다.
-
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
어우 가끔 말씀이 너무 빠르십니다.
말씀을 빠르게 하시니까 실수가 가끔 나오시는것 같아요. 4:52에 Http 요청, Http 응답 둘 다 사용되는 경우를 말씀 해주시는데, 말씀해주시는 예시에서 1. Http 응답의 메시지 바디를 객체로 바꾸어 컨트롤러의 파라미터로 넘겨준다. 2. 컨트롤러의 return값을 Http 응답 메시지에 넣어준다. 이렇게 말씀해주십니다. 1번에서 Http요청의 메시지 바디 내용을 객체로 바꾸어 컨트롤러의 파라미터로 넘겨주는게 아닌가? 생각하고 있거든요. 입문부터 해서 강의 잘 듣고 있습니다. 좋은 내용의 강의 최고에욥.
-
자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
재귀적으로 풀이해본 코드입니다!
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(target, arr) { arr.sort((a, b) => a - b); function binary(start, end) { if (start > end) return "찾는 값이 없습니다."; const mid = (start + end) / 2; if (arr[mid] === target) return mid + 1; else if (arr[mid] > target) return binary(start, mid - 1); else if (arr[mid] < target) return binary(mid + 1, end); } return binary(0, parseInt(arr.length / 2)); }
-
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
연출 추가해보았습니당
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 마지막에 심심한거같아서 연출 추가해보았습니당 https://www.youtube.com/watch?v=_bIJCBBBPkU
-
유니티 프로그래머 현업자의 기본 스킬들
강의할때, BGM 배경음악 없앴으면 좋겠어요.
강의할때 BGM 배경음악 없앴으면 좋겠어요. 설명하시는 내용에만 집중할 수 있게요. 배경음악이 강의를 듣는데에 방해가 됩니다.
-
HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌2)
오랜만에 글을 남기게 되었네요
선생님 안녕하세요. 오랜만에 글을 남기게 되었습니다. 먼저 인턴에서 정규직 전환이 되어서 다니고 있습니다. 정규직 급여의 경우 선생님 포트폴리오 강좌에서 언급하셨던 분에 +@를 받고 있습니다. 회사도 계속 성장하고 복지도 괜찮아서 잘 다니고 있습니다. 아직까지 일을 하면서 '잘 하고 있나?'라는 의구심과 불안감이 들 때마다 선생님 강좌를 보면서 만들어보고 있었습니다. 지금 업무는 기존 유지보수 + 신규사업 관련 퍼블리싱 업무를 하고 있습니다. 처음에 적응을 못하고 저번 통화떄 말씀드렸던 것처럼 jsp,vue를 봤을 때 혼란스러웠는데 또 보다보니깐 구조라던지 그런게 눈에 아주 살짝 익고 있네요. 확실히 아직까진 개발머리가 안되어서 퍼블리싱 업무를 하다 보니 디자이너와 개발자 사이에서 이리저리 치이는게 크지만 그 둘을 연결시켜주는 징검다리 역할이라 생각하면서 일을 하고 있습니다. 수업을 듣다가 궁금한점이나 간간히 일하면서 소식이 있다면 게시판의 글을 남기도록 하겠습니다. 감사합니다.
-
ES6 문법과 함께하는 모던 Javascript(자바스크립트) 고급 Part.3
이내용을
https://velog.io/@edie_ko/JavaScript-event-target%EA%B3%BC-currentTarget%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90 요약하면 이거네요. 길게 설명하시는건 참 아쉽습니다
-
가입을 했으니
무엇부터 들어볼까 손가락이 드릉드릉하구먼
-
타입스크립트 입문 - 기초부터 실전까지
느낌표살인마네
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
Axure RP 9,10 - 서비스 기획자를 위한 최적의 프로토타이핑 툴
해당 강의 좋네요~~
해당 강의 도움이 많이 됐습니다.
-
Slack 클론 코딩[백엔드 with NestJS + TypeORM]
typeORM에 대한 질문이 있습니다.
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 개인 프로젝트까지 생각해서 강의를 들어보고 있는데 ORM 기능이란 것을 처음 사용하다보니 미숙합니다. 현재 개인 프로젝트를 AWS RDS에 올리고 EC2 외부에서는 SSH 터널링을 통해 접속가능하게 설정해놓았는데 typeORM에서는 Connection을 SSH 터널링을 통해 가능한가요? TypeORM.IO에서도 내용이 없어서 불가능한 부분인지 궁금합니다
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
<block end>, but found '<block mapping start>'
spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: truelogging.level: org.hibernate.SQL: debug# org.hibernate.type: trace pdf 뷰어마다 달라서 에러 뜨는경우가 있네요
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
<block end>, but found '<block mapping start>' 에러 뜨시는분들
삭제된 글입니다
-
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
KafkaOrderDto 및 4개 클래스 통합Dto 작성 공유
안녕하세요. 강의중, kafka의 connect를 위한 dto (kafkaOrderDto) 를 만드는 부분이 있는데 강사님께서는 kafkaOrderDto, schema, payload, field 를 4개 클래스화 하여 사용하셨습니다. 또한 이에 따라 producer와 controller에 해당 dto를 세팅키 위한 코드들이 들어 있습니다. 그런데 저는 이부분이 귀찮아서(..) 클래스를 1개로 통합하여 사용하는 방법으로 짜보았습니다. 저보다 고수님들은 많으실테지만 편의를 위해 통합 Dto를 공유하여 봅니다. 1. KafkaConnectOrderDtoV1 (버전1) package com.hwan2272.msaecomms.dto;import lombok.AllArgsConstructor;import lombok.Data;import java.util.Arrays;import java.util.Date;import java.util.List;@Datapublic class KafkaConnectOrderDtoV1 { private Schema schema; private Payload payload; public KafkaConnectOrderDtoV1() { this.setSchemaInit(); } public KafkaConnectOrderDtoV1(OrderDto orderDto) { this.setSchemaInit(); this.setPayloadFromOrderDto(orderDto); } public void setSchemaInit() { Schema sch = new Schema("struct", Arrays.asList( new Field("string", true, "order_id"), new Field("string", true, "user_id"), new Field("string", true, "product_id"), new Field("int32", true, "qty"), new Field("int32", true, "unit_price"), new Field("int32", true, "total_price") ), false, "orders"); this.setSchema(sch); } public void setPayloadFromOrderDto(OrderDto orderDto) { Payload pay = new Payload( orderDto.getOrderId(), orderDto.getUserId(), orderDto.getProductId(), orderDto.getQty(), orderDto.getUnitPrice(), orderDto.getTotalPrice(), orderDto.getCreatedAt() ); this.setPayload(pay); } @Data @AllArgsConstructor public class Schema { private String type; private List<Field> fields; private boolean optional; private String name; } @Data @AllArgsConstructor public class Field { private String type; private boolean optional; private String field; } @Data @AllArgsConstructor public class Payload { private String order_id; private String user_id; private String product_id; private Integer qty; private Integer unit_price; private Integer total_price; private Date created_at; }} schema, payload, field 를 모두 inner class 화 시키고, 메소드를 만들어 내부에서 셋팅이 되도록 했습니다. 여기에서, 개선점 몇가지가 보여 수정했습니다. 1) schema와 payload를 보면 orderDto와 필드명을 비교했을때 필드명이 단순히 CamelCase -> UnderScore 형태이다. => 파라미터로 Dto를 던져 필드명만 파싱하면 될것 2) 1을 적용할때 payload를 굳이 inner class화 안해도 될것 같다. => HashMap으로 변환 3) schema와 payload를 세팅하는 Dto의 변환 로직을 비슷하게 하면 될것 같다. => for 문으로 Dto를 돌아 필요한 세팅을 지정 이외 이런저런 생각들을 기반으로, V2도 만들게 됐습니다. 2. KafkaConnectOrderDtoV2 (버전2) package com.hwan2272.msaecomms.dto;import com.google.common.base.CaseFormat;import lombok.AllArgsConstructor;import lombok.Data;import java.util.*;@Datapublic class KafkaConnectOrderDtoV2 { private Schema schema; //private Payload payload; private Map<String, Object> payload; /*public KafkaConnectOrderDtoIncrease() { this.setSchemaInit(); }*/ public KafkaConnectOrderDtoV2(OrderDto orderDto) throws Exception { this.setSchemaInit(orderDto); this.setPayloadFromOrderDto(orderDto); } public void setSchemaInit(OrderDto orderDto) { List<Field> fieldList = new ArrayList<>(); for(java.lang.reflect.Field f : orderDto.getClass().getDeclaredFields()) { if(!f.getName().equals("createdAt")) { String underscoreField = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, f.getName()); String simpleType = f.getType().getSimpleName(); Field field = new Field( (simpleType.toLowerCase().contains("string") ? "string" : simpleType.toLowerCase().contains("integer") ? "int32" : simpleType.toLowerCase().contains("date") ? "int64" : ""), true, underscoreField ); fieldList.add(field); } } Schema sch = new Schema( "struct", fieldList, false, "orders"); this.setSchema(sch); } public void setPayloadFromOrderDto(OrderDto orderDto) { Map<String, Object> payMap = new LinkedHashMap<>(); for(java.lang.reflect.Field f : orderDto.getClass().getDeclaredFields()) { f.setAccessible(true); String underscoreField = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, f.getName()); Object data = null; try { data = f.get(orderDto); } catch (IllegalAccessException e) { e.printStackTrace(); } payMap.put(underscoreField, data); } this.setPayload(payMap); } @Data @AllArgsConstructor public class Schema { private String type; private List<Field> fields; private boolean optional; private String name; } @Data @AllArgsConstructor public class Field { private String type; private boolean optional; private String field; } /*@Data @AllArgsConstructor public class Payload { private String order_id; private String user_id; private String product_id; private Integer qty; private Integer unit_price; private Integer total_price; private Date created_at; }*/} 구글에서 제공하는 CaseFormat이 주력이 되겠습니다. com.google.common.base.CaseFormat String underscoreField = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, f.getName()); 파라미터 orderDto의 필드는 java.lang.reflect.Field으로 가져옵니다. 해당 Dto를 사용하게 되면 orderDto만 파라미터로 넣어줄시 자동으로 Dto의 필드명들을 파싱하여 schema와 payload를 만드는 효과를 갖게 됩니다. 다만 V2는 setPayload에서 try catch등의 exception 핸들링이 필요합니다. 한가지 고민은 createdAt 같은 date 형 데이터들은 kafka에서 int64로 받아들이며 실제 토픽에도 숫자형으로 들어가지만 MariaDB에서 처리가 안되는 점입니다. 구글링해보니 이를 처리키위한 kafka connect의 config설정이나 기타 방법이 있긴한것 같습니다만, 여기에서는 createdAt이라는 칼럼의 특성상, DB insert에만 의존하도록 하여야 할것으로 생각되어 Dto의 필드 파싱시에는 제외하였습니다. V1, V2 적용버전 postman에서 테스트후 MariaDB적재 모두 정상 확인했습니다. 3. Producer에서의 사용 @Service@Slf4jpublic class KafkaConnectProducer { @Autowired KafkaTemplate kafkaTemplate; public KafkaConnectOrderDtoV2 send(String topic, OrderDto orderDto) { //KafkaConnectOrderDtoV1 kafkaConnectOrderDto = new KafkaConnectOrderDtoV1(orderDto); //kafkaConnectOrderDto.setPayloadFromOrderDto(orderDto); KafkaConnectOrderDtoV2 kafkaConnectOrderDto = null; try { kafkaConnectOrderDto = new KafkaConnectOrderDtoV2(orderDto); } catch (Exception e) { e.printStackTrace(); } (저는 KafkaTemplate을 Autowired 로 사용합니다.) 결과적으로 핵심 코드는 모두 V1, V2 안에 들어 있고, controller나 producer에서는 기본 선언 정도만 하는것으로 하면 되도록 되었습니다. 코드량을 조금이라도 줄여 보고자 시작한 작업이었습니다. 참고하셔서 여러분만의 DTO를 만들어 보셔도 좋고, (JsonObject를 만들어 형태만 맞춰서 던지면 무방할듯 보입니다.) 수강생 여러분께 조금이라도 도움이 되었으면 합니다. 감사합니다.
-
스프링 핵심 원리 - 기본편
웹개발 진로에 대하여
삭제된 글입니다
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
명강입니다!
무료로 스프링을 배우는데 이런 명강을 듣게 되어 감사합니다 :)
-
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
그...버그일줄은...
GameManager아이콘이 버그일줄...몰랐네요 새로운거 알아갑니다~
-
[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
Windows 11 local 환경에서 돌리는 분들이 만나는 error 와 debug
혹시 저와 같은 환경에 같은 오류를 만나실 분들을 위해 글을 남깁니다. cuda 11.3 torch v1.11 nvidia rtx 2060 vram 6GB 1) device 못찾는 error sol) from mmdet.utils import get_device cfg.device = get_device() 2) Broken pipe Error sol) cfg.data.workers_per_gpu= 0 3) RuntimeError: Index put requires the source and destination dtypes match, got Long for the destination and int for the source. sol) data_anno = { 'bboxes': np.array(gt_bboxes, dtype=np.float32).reshape(-1, 4), 'labels': np.array(gt_labels, dtype=np.int64), 'bboxes_ignore': np.array(gt_bboxes_ignore, dtype=np.float32).reshape(-1, 4), 'labels_ignore': np.array(gt_labels_ignore, dtype=np.int64) } 4) RuntimeError: CUDA out of memory sol) cfg.data.samples_per_gpu = 1