개인 블로그
비전공자의 전공자 따라잡기 - 네트워크, HTTP
안녕하세요, 제로초님. 덕분에 개발자로서 많은 성장을 이루었습니다. 제로초님 강의는 링크 걸어놓고, 자료는 따로 올리지 않고 강의 영상은 중간중간 캡쳐하면서, 공부한 내용을 개인블로그에 기재하고 싶은데 괜찮을까요? 감사합니다.
- 네트워크
- tcpip
- websockets
173만명의 커뮤니티!! 함께 토론해봐요.
비전공자의 전공자 따라잡기 - 네트워크, HTTP
안녕하세요, 제로초님. 덕분에 개발자로서 많은 성장을 이루었습니다. 제로초님 강의는 링크 걸어놓고, 자료는 따로 올리지 않고 강의 영상은 중간중간 캡쳐하면서, 공부한 내용을 개인블로그에 기재하고 싶은데 괜찮을까요? 감사합니다.
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Rookiss님 안녕하세요! 몇가지 궁금한 것들 질문으로 남겨봅니다 ㅠ 시간 남으실때 조언해주시면 감사하겠습니다!! 먼저 저는 2년차 모의해킹 보안컨설팅을 하고있고 내일채움공제를 진행중이라 24년 6~7월 정도에 퇴사 할 예정입니다! 퇴사 후에 프로카데미를 다니려고 하는데, 학원에 가기 전 전체적인 내용을 한번 훑고 가고싶은 마음이 있습니다. 올인원 강의를 다 듣고나서 어떤식으로 공부하면 좋을지 간단한 서버개발 로드맵 같은게 있다면 추천해주시면 감사하겠습니다 ㅠ 클라이언트도 개인적으로 공부하고싶은데 이 부분은 독학으로 Rookiss님 시리즈만 듣고 공부해도 현업과 소통 & 개인적인 사이드 프로젝트를 진행하는데 무리가 없을 지 궁금합니다! 지금 하는 일에서도 계속 공부하고있고, cs지식이 어느정도는 잡혀있습니다 그리고 리버스 엔지니어링과 시스템해킹쪽도 어느정도 알고있는데 학력은 고졸 후 학점은행제를 통해 학사를 진행하고 있어서(올해 취득예정) 다른 대학 전공자들과 경쟁했을때 이런부분이 밀리지 않을만한 장점으로 어필이 가능할까요? 개인적으로는 게임업계가 해킹과도 밀접한 연관이 있다보니 어필이 될 수 있지 않을까 기대하고 있는데 현업 입장에서는 가산점이 있는지, 딱히 신경쓸 정도는 아니라던지 하는 관점이 궁금합니다! 좋은 강의 재밌게 잘 듣고 있습니다! 감사합니다 ㅎㅎ
실전! Querydsl
QueryDSL 내부 메소드 중 fetchResult() 나 fetchCount()는 만료된 메소드에 대해서는 QueryDSL에서 Blaze-persistence Integration 라이브러리 사용을 권장 하는데요, Blaze-persistence도 QueryDSL 처럼 쿼리 빌더 API 로서 개발자에게 유지보수하기 좋은 객체를 제공해주고 있습니다. 게다가 최신 업데이트 날짜가 글 작성일 기준(2023.06.21) 일주일 이전이라 여전히 유지보수되고 있어서 최신 스프링버전과 호환성도 어느정도 보장되었다고 볼 수 있습니다. 개인적으로 SpringBoot 3.1.0 기준으로 다음과 같이 세팅하니 정상적으로 동작하는 걸 확인했는데요, 혹시 저처럼 deprecated 메소드를 쓰는 것이 신경쓰이시는 분들을 위해 공유드립니다. build.gradle dependencies { //Blaze-Persistence implementation 'com.blazebit:blaze-persistence-integration-querydsl-expressions-jakarta:1.6.9' implementation 'com.blazebit:blaze-persistence-integration-hibernate-6.2:1.6.9' implementation 'com.blazebit:blaze-persistence-core-impl-jakarta:1.6.9' } BlazePersistenceConfiguration.java @Configuration public class BlazePersistenceConfiguration { @PersistenceUnit private EntityManagerFactory entityManagerFactory; @Bean @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) @Lazy(false) public CriteriaBuilderFactory createCriteriaBuilderFactory() { CriteriaBuilderConfiguration config = Criteria.getDefault(); // do some configuration return config.createCriteriaBuilderFactory(entityManagerFactory); } } QuerydslBasicTest.java ..... JPAQueryFactory queryFactory; @Autowired CriteriaBuilderFactory cbf; BlazeJPAQueryFactory blazeQueryFactory; @BeforeEach public void testEntity(){ queryFactory = new JPAQueryFactory(em); // 이건 동시성 문제를 고민하지 않아도 됨, 해결됨 blazeQueryFactory = new BlazeJPAQueryFactory(em, cbf); ..... 적용 결과 기존 QueryDSL 세팅한 것에 추가로 세팅하시면, 만료된 메소드에 대해 Blaze-persistence 객체로 대체되는데요, 기존 querydsl 클래스를 상속 받는 형태여서 QueryDSL이 제공하는 메소드를 그대로 쓸 수도 있습니다. fetchResults는 fetchPage로 바꿔서 사용할 것을 권장하고 있다는 점 참고하시면 될 것 같습니다. 추가로 내부로직이라든지 설명이 더 필요하시다면 Blaze-persistence 릴리즈 노트 와 Blaze Persistence Document 를 참고하시면 좋을 것 같습니다. 이 글에 대해 지적 및 피드백 해주시면 정말 감사하겠습니다. 감사합니다. 여담 및 고민 : 개인적으로 이 라이브러리의 내부로직을 뜯어보면서 분석하고 검증할 수 있는 역량은 부족한지라 분석 및 검증하는 방법에 대해서 팁이라든지, 아니면 blaze-persistence 사용할 시 주의해야할 점이라든지 조언해주실 수 있으시면 정말 감사드립니다. 강의를 듣던 중에 서브쿼리가 발생하는 부분에서는 정상동작하지 않는 것을 발견했습니다. @Test public void findUserDto(){ QMember memberSub = new QMember("memberSub"); List<UserDto> memberDtoList = queryFactory //이건 blazeQueryFactory가 정상 동작하지 않음 .select(Projections.fields(UserDto.class, //생성자 필드 순서에 맞게 변수를 만들어야 한다. member.username.as("name"), // member.age 대신 서브쿼리로 다 최대 나이로 찍고 싶어 ExpressionUtils.as( JPAExpressions .select(memberSub.age.max()) .from(memberSub), "age") )) .from(member) .fetch(); for (UserDto userDto : memberDtoList) { System.out.println("userDto = " + userDto); } } QueryDSL 쿼리 /* select member1.username as name, (select max(memberSub.age) from Member memberSub) as age from Member member1 */ select m1_0.username, (select max(m2_0.age) from member m2_0) from member m1_0 blaze-persistence 쿼리 /* SELECT member1.username AS name, member1.age AS generatedSubquery_1 FROM Member member1 */ select m1_0.username, m1_0.age from member m1_0 blaze-persistence generatedSubquery라 하여, 서브쿼리를 하나의 alias로 처리를 해버렸는데, 후행으로 이 generatedSubquery 에 대한 정의가 따라오질 않습니다... 왜 이런 차이가 나오는지는 모르겠지만 blaze-persistence 활용할 때는 유의해야할 것 같습니다.
AWS Certified Solutions Architect - Associate 자격증 준비하기
안녕하세요 강사님, 좋은 강의 제공해주시는 것 감사합니다. 제가 강의를 신청하고 급하게 외근을 다니게 되어, 이제 다녀와 들으려고 하는데 수강 기간이 조금 빠듯한 듯 하여.. 한 번 수강 기간을 연장해주실 수 있는지 요청드려 봅니다. 연장해주신다면 꼭 자격증을 취득하도록 노력하겠습니다. 감사합니다.
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
제목 그대로 입니다. 선생님이 클린코드나 코드 리팩토링 강의 계획이 있으시다면 무조건 듣고 싶은데 강의 계획있으신지 문의드립니다.
풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
현업에서는 아파치 아니면 nginx를 만나는데 아파치 설명도 이정도만 해주셨음 좋겠어요 ㅠㅜㅠㅠ 그동안 답답했던게 속이 뻥 뚫리는 느낌이네요
20년 경력자의 알기 쉬운 컴퓨터네트워크
복습 겸 만든 토폴로지가 제대로 동작을 안해서.. 도움 부탁드려요 ㅜㅜ 이틀째 고민중인데 답이 안나오네요.. 토폴로지 링크: https://drive.google.com/file/d/1h8WO5ultT23Ya_hyJ_Xqg0wpFQZ1sdR4/view?usp=sharing 토폴로지 설명: HSRP 프로토콜을 이용한 L3 스위치 이중화, RADIUS 서버를 포함한 WAN, 무선 라우터를 이용한 무선 LAN 토폴로지 입니다. SW1의 gig0/1 을 shutdown시켜 HSRP가 잘 작동하는지 확인하려했습니다 유선 LAN구간에서는 잘 작동했으나 무선 LAN에서는 계속 전송 오류가 났습니다 발견한 문제점: Wireless Router0에서 게이트웨이 라우터(R1)으로 PDU 테스트 했을 때, SW2에서 메시지가 삭제됨을 확인했습니다. 목적지가 200.200.201.1로 설정되어 그런것 같습니다. 왜 유선 LAN은 HSRP가 잘 적용되어 새 경로인 200.200.202.1로 잘 경로 설정이 되었는데, 무선 LAN은 gig0/1이 다운되기 전의 경로를 계속 이용하는지 모르겠습니다... 게이트웨이 라우터(R1)에서 Wireless Router0로 PDU 테스트 했을 때, Wireless Router0 에서 메시지가 삭제됨을 확인했습니다. 목적지가 200.200.200.7로 설정되어 있는데...Wireless Router 0의 Internet IP가 200.200.200.7이거든요. 왜 삭제 되었는지 알 수가 없습니다... RADIUS 서버(Server0)에서 Wireless Router0으로 PDU 테스트를 했을 때, R2에서 메시지가 삭제됨을 확인했습니다. 목적지가 192.168.200.1, 즉 무선LAN IP로 설정되서 인것 같습니다. (1) 왜 인터넷 IP 200.200.200.7 대신 무선 LAN IP 192.168.200.1로 설정이 된건지, (2) R2라우터에 무선 LAN정보를 Static으로라도 입력해야하는건지 궁금합니다. 추가 궁금증: 경로 재설정을 위해 무선 라우터를 껐다 켜서 초기화하는 방법도 생각해봤는데...Wireless Router0의 Physical Device View에 전원버튼이 없는것 같아요. 혹시 무선 라우터 WRT300N 전원 강제종료 할 수 있는 방법이 있나요?
아두이노와 떠나는 사물인터넷 여행 - 아두이노 입문부터 IoT 중급까지!
아두이노와 전자회로를 시뮬레이터 할수 있는 사이트입니다. 저처럼 전자가 처음이신분들은.. 기판에 하기전에 한번 해보시면.... 쇼트나는지 미리 확인이 가능합니다^^ 정보 차원에서 공유합니다 https://www.tinkercad.com/
AWS Certified Solutions Architect - Associate 자격증 준비하기
안녕하세요. 그동안 너무 바빠서 강의를 못듣고 있다가 이제서야 강의를 들으려고 했더니 6일이 남았네요 ㅠㅠ 신청하고 겨우 1개정도 들은거 같은데 너무 아깝습니다.. 영심히 학습할 의지가 있는데 수강기간 혹시 1달정도 연장이 가능할까요?
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버 쪽 오니까, 정말 난이도가 이전 강의들에 비해서 체감 난이도가 엄청 확 뛰네요 ㅠㅠ 특히 지금 Session 쪽 SendBuffer 강의 듣고 있는 중인데, 서버, 클라이언트 흐름 쪽으로 들어오니,멀티쓰레드나 락 개념보다도 어려운 거같네요 ㅠㅠ 정말 빡 집중해서 보면, 강사님께서 작성하시는 코드가 아~ 이런 흐름이구나, 이래서 이 부분에 이런 코드를 작성하시는구나 정도가 이해가 될려고 하는 수준이고 막상 제가 처음부터 혼자 구현하라고 하면 절대 못 할 거같은 느낌이 드는데.. 이럴땐 그냥 대충 이해만 하고 한번 크게 훑은 다음에, 다시 여러번 들어보는게 좋을까요? 아니면 처음 들을 때, 완벽하게 이해하고 넘어가는게 좋을까요? 혹시 이런 상황에 추천하시는 공부 법 알려주심 감사하겠습니다!
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
C# 기초 공부할때는 코드가 이해가 안되도 그림으로 실행흐름을 그려보면서 이해해볼수있었는데 이거는 코드들이 비동기실행되니까 정확한 순서로 그림을 그려보는게 힘들어서 이해가 정말 힘드네요;
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
저는 이유는 모르겠으나 사소한 것 하나하나 정확하게 명시하는 것을 선호하는 편이라서 using namespace std;를 사용하지 않는 편인데 이 강의를 포함해서 많은 강의들을 보면 std를 직접 타이핑하는 경우는 본 기억이 없습니다. 실제 현업의 코딩 스탠다드 또한 std는 생략하자는 분위기인가요?
자바 ORM 표준 JPA 프로그래밍 - 기본편
https://xively.tistory.com/43
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요, c++로 iocp server를 구현해서 c++로 만든 client에서 테스트 중 입니다. 다만, client는 언리얼로 만들어서 c++ 만든 iocp server 보낸 데이터로 박스도 움직이고 채팅도 확인해보고싶은데 혹시, 연동하는 과정에 관련된 정보 같은것은 어디서 어떻게 확인해볼수 있을까요? 구글에 검색하니까 언리얼을 iocp server와 연동하는 정보가 너무 없어서 답답해서 남겨봅니다
CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
등차수열의 합 보다는 조합으로 설명하셔도 좋을 것 같아요. n개의 노드가 서로서로 연결하는 개수는 n개중에 연결되는 2개의 노드를 선택하는 경우의 수랑 같다고 하셔도 좋을 것 같아요. nC2 = n (n-1) / 2
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
현재 국비 학원을 수료하며 프로젝트를 마친 뒤에 김영한님 강의를 듣고 있으며 spring에 대해 이제서야 이해하려 하는 취준생입니다. 문득 제가 어떤 개발을 하고 싶은지 방향성에 대해 생각해보게 되었습니다. ->어떤 개발을 하고 싶은지 방향성에 대해 되짚어 보고 있었다 ->SQL문을 짜면서 효율적인 방법은 무엇이 있을까 고민하는 과정이 스스로 가치 있는 고민을 하고 있다는 생각이 들었다. ->데이터 처리 속도 개선에 관하여 고민하는 개발자가 되고 싶다. ->대용량 트래픽을 다루는 서비스 회사에서 성장하고 싶다. 질문 ==> 위의 4문장을 설득력 있게 말하기 위해서 취준에 뛰어드는 예비 백엔드 개발자 수준에서 할 수 있는 "공부 방향"은 무엇이 있을지 조언 해주실 수 있을까요? (특정 개념이나 강의를 추천해주셔도 감사할 것 같습니다. )
https://adevspoon.page.link/XJYS 개발 공부, CS 공부 등등 개발자가 되기까지 해야할 공부가 너무 많지 않나요? 개발자 취업, 면접, 이직 어떻게 준비해야할지, 비전공 개발자인데 어디서부터 시작해야할지 모르겠다구요? 개발 한 스푼이 도와드립니다! https://adevspoon.page.link/XJYS 하루에 하나씩 IT 기술면접 질문 제공받고 공부해가며 Computer Science 정복해봐요! 자료구조, 알고리즘, 네트워크, 운영체제, 데이터베이스까지 방대한 CS 지식을 가볍게 차근차근! 질문에 답변하고, 도움이 된 답변을 모아보고, 받은 질문을 모아보며 복습까지. 오늘부터 하루에 딱 하나씩만! 지금 바로 시작해보세요
실전! Querydsl
plugins { id 'org.springframework.boot' version '2.7.4' id 'io.spring.dependency-management' version '1.0.14.RELEASE' id 'java' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' // queryDSL 설정 implementation "com.querydsl:querydsl-jpa" implementation "com.querydsl:querydsl-core" implementation "com.querydsl:querydsl-collections" annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor 사용 지정 annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드 annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드 } tasks.named('test') { useJUnitPlatform() } // Querydsl 설정부 def generated = 'src/main/generated' // querydsl QClass 파일 생성 위치를 지정 tasks.withType(JavaCompile) { options.getGeneratedSourceOutputDirectory().set(file(generated)) } // java source set 에 querydsl QClass 위치 추가 sourceSets { main.java.srcDirs += [ generated ] } // gradle clean 시에 QClass 디렉토리 삭제 clean { delete file(generated) } 해당 소스는 타사 강의 보다가 본 설정에서 가져왔습니다. 기존 영한님 강의와 다른 점이 3가지 있으니 주의하시기 바랍니다. Querydsl Q파일 생성 위치가 다릅니다. 기존 영한님 강의대로 $build 로 시작하는 설정을 사용하면 테스트 실행 시 Q파일의 위치를 찾지 못해서 테스트가 실패합니다. Gradle -> Tasks -> build -> clean Gradle -> Tasks -> build -> build 혹은 classes 기존 영한님 교안에는 빌드 시 Gradle -> Tasks -> other -> compileQuerydsl 로 Q파일을 생성하지만, 이 방법의 경우 other에 해당 메뉴가 없습니다. 그래서 빌드 시에는 그냥 build 메뉴의 build 혹은 classes 로 빌드하시면 Q파일이 생깁니다. 영한님 강의에서는 gradle build 폴더가 대부분 git 버전관리에 포함되지 않으므로 따로 설정할 필요가 없지만, 이 경우 Q파일이 소스폴더에 들어가므로 .gitignore 에 아래와 같이 별도로 경로를 설정해 주어야 합니다. ### Querydsl /src/main/generated 혹시 저같이 청개구리마냥 강의에 나온 버전 사용 안 하고 최신 버전 사용하시는 분들께 도움이 되었으면 좋겠습니다. 저도 타사 강의에서 가져온 것이고 기초 테스트만 통과한 것이라서 혹시 강의에 맞지 않는 경우 영한님이나 다른 분들이 추가 정보를 주시면 좋을 것 같습니다. 여담인데 QueryDSL은 쿼리 짜긴 확실히 편한데 설정이 버전마다 중구난방이라 불편합니다. 똑똑한 개발자분들이 이런 설정도 그냥 @Configuration 으로 빼버리는 거 만들어주지 않을까 하는 기대가 있긴 합니다.
저는 일단 정보통신공학 2학년인데 소프트 커리를 타려고 생각중이에요 2학기에 C++ 자료구조론을 배우는데 여론으로는 C++은 게임 개발이나 인공지능? 쪽에서 많이 쓰인다고 하고 제가 생각하는 프론트/백엔드의 웹 개발자는 java나 python이 주 프로그래밍 언어이고 IT기업 쪽에서도 java를 활용한 툴(Spring 등)을 선호하고 있다고 들어서 C++은 학점 챙기는 용으로 공부하고 진로를 위해서는 java를 중점적으로 공부하려고 하는데 1. 지금 java와 C++ 자료구조를 병행해서 공부를 하는 것이 나은지(공부 비중은 C++을 더 높게) 2. 일단은 C++ 자료구조를 중점적으로 공부할지 고민되어 질문글 올립니다 ㅠㅠ - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
서울시에서 뉴딜일자리사업 일환으로 2차 서비스플랫폼개발자 양성과정으로 3개월 인턴십 (급여 월 260) 보내주는 프로그램 진행중인데 신청해보세요! 자세한 내용은 https://blog.naver.com/kjc_sh/222775806456 참고해주세요