미루고 미루고 또 미루다 해가 바뀌고 나서야 채팅 프로그램 포스팅을 하게 되었다. 작년 5월경, 자대 배치받고 환경에 슬슬 적응해나갈 때쯤 한 가지 불편한 점이 생겼다. 사무실에서 일하다 보면 다른 사무실 사람들과의 소통이 필수적이다. 하지만 각자 다른 사무실에 있고 사무실 간 거리가 있기 때문에 소통수단이 필요하다. 내선 전화가 있긴 하지만 교장 관리나 작업 등으로 한쪽이 자리를 비워 엇갈리는 경우가 정말 빈번하다. 부재중 전화가 와있어 다시 전화하면 80% 확률로 상대방이 부재중이다... 결국 상대 사무실까지 걸어가서 쪽지를 남긴다. 상당히 비효율적이고 불편했다. 그래서 채팅 프로그램을 만들었다. 소켓 통신 관련 이론 지식을 얻기 위해 도서관에 있던 '윤성우의 TCP/IP 열혈 프로그래밍' 책을 읽고..
분류 전체보기

입대 1주년이 눈앞으로 다가왔다. 시간이 참 빠르다. 2021년 한 해동안 어떻게 살아왔으며, 뭘 했는지 정리하고 되돌아보고자 한다. 솔직히 나는 입대 전부터 내가 뭘 하고 싶은지 몰랐다. 딱히 흥미가 생기는 것도 없었고 무언가 이끌려서 하고 싶은 것도 없었다. 그냥 학교 수업 듣고 흔한 컴공 대학생처럼 대학 생활하며 방황하고 있었다. 내가 하고 싶은 일을 찾아 나서지는 않고 언젠가 내가 잘하고 좋아하며 하고 싶은 무언가가 신의 계시처럼 내 눈앞에 짠! 하고 나타나기를 기다리고만 있었다. 이러한 상태에서 대학교 2학년을 마치고 1월에 바로 입대했는데 입대하고도 달라지는 것은 없었다. 그래도 대학교 2학년까지 마쳤으면 뭔가 달라져야 하지 않나, 왜 시간이 지나도 달라지는 게 없는지 생각해보니 내가 아무것도..

스프링부트를 사용하여 기본적인 CRUD 기능이 있는 게시판을 구현하였다. 그 과정을 정리하고자 한다. 모든 코드를 설명하는 것보다는 내가 게시판을 구현하면서 했던 고민과 생각을 중점적으로 글을 작성하였다. 인프런 김영한 님의 스프링 강의를 정주행하고 학습한 내용을 바탕으로 구현하려고 했는데 나는 아직 자바도 제대로 공부한 적도 없고 스프링도 처음 접하는 상황이었다. 때문에, 강의에서 알려주는 꿀팁이나 테크닉이 얼마나 유용한 것인지, 강의에서 제시하는 구현 틀과 방법이 얼마나 효율적인 구조인지 공감하기 힘들었다. 이 상태로 프로젝트를 진행하면 어떻게든 게시판을 완성할 수는 있겠지만 나에게 남는 게 많지 않을 것 같았다. 직접 무수한 시행착오를 겪으며 목표를 달성하고 강의를 다시 정주행한다면 깊은 공감에서 ..

우리는 인생을 살아가면서 무수히 많은 일상 속 순간에, 어쩌면 인생을 좌우 짓는 일생일대의 중요한 순간에 상대방에게 정보를 전달해야 하는 상황에 놓이게 될 것이다. 이 책에서는 말을 전달할 때 그 효과와 효율성을 증폭시킬 수 있는 전달 패턴과 메소드를 알려 준다. 상대가 머리 쓰지 않아도 되게 하라 무언가를 전달한다는 것은 불안정한 커뮤니케이션이다. 내가 아무리 열심히, 공들여 전달해도 상대방이 잘 이해하고 기억하는 것은 전적으로 상대방의 능력이나 상태에 달려있다. 때문에 나의 문장과 표현을 다듬을 뿐만 아니라 듣는 상대가 누구인지, 상대의 상태에 맞게 어법과 구조를 수정할 필요가 있다. 정보를 전달할 때 상대방이 이해하기 쉽고 설득력을 높일 수 있는 방법 중 하나는 사전에 '정리된 상태'로 만들어서 상..

스프링 기반 게시판을 구현하며 사용했던 mysql 명령어를 정리하고자 한다. CRUD 관련 쿼리문은 Spring data JPA에게 큰 도움을 받았다..! TMI) MySQL 돌고래 로고는 2001년에 만들어졌다. MYSQL 창업자 중 한 명이자 핵심 개발자인 Monty가 돌고래를 좋아했다고 한다. 1. database 생성 - mysql의 기본 character set은 latin1으로, 한글을 지원하지 않는다. 한글 지원하도록 character set을 utf8로 지정 mysql> CREATE DATABASE [DB명] DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; 2. 사용자에게 권한 부여 DB에 접근하는 사용자들에게 특정 권한을 부여하여 데이터를 보호..

요즘 메타버스가 핫하다. 구글에서 제공하는 검색 기록 기반 빅데이터 분석 서비스인 Google Trends에 따르면 특히 2021년도 들어서 메타버스에 대한 관심이 집중되고 있다. 메타버스는 새로 등장한 신개념 IT 용어가 아니다. 마인크래프트, 제페토, 동물의 숲은 누구나 한 번쯤 직접 경험해 보거나 간접적으로 접해보았을 것이다. 이들도 모두 메타버스라고 할 수 있다. 이렇듯 이미 우리 곁에 존재하고 있었다. '메타버스'라는 키워드에 대한 구글 트렌드 검색 결과이다. 위의 그래프들을 보면 메타버스에 대한 관심이 21년도에 들어서 급격히 증가했으며 이는 대한민국 뿐만 아니라 전 세계에서 이슈가 되고 있는 인공 지능, 빅데이터보다 더 높은 관심도를 보인다는 사실을 알 수 있다. 메타버스가 이렇게 핫한 이유..
2000년대에 로버트 마틴(클린코드 저자)이 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 정의하였다. 이를 앞 글자를 따 SOLID라고 한다. SOLID 1. SRP(Single Responsibility Principle, 단일 책임 원칙) - 한 클래스는 하나의 책임만 가져야 한다. - 설계에 변경이 있을 때 그에 따른 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이라 할 수 있다. 2. OCP(Open/Closed Principle, 개방/폐쇄 원칙) - 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. - 확장하려면 당연히 변경이 필요한 것이 아닌가? -> 아니다. '다형성'을 잘 활용하여 '역할'과 '구현'을 분리하면 가능하다! - 다형성을 잘 활용해도 구현 객체..
앞서, 구름IDE에서 스프링부트 개발환경 세팅하기 글을 썼지만 그 방법으로 할 필요가 없었다. 추가로 jpa와 mysql 사용까지 추가하여 다시 정리하고자 한다. 이대로만 따라한다면 당장 구름IDE에서 간단한 Springboot 프로젝트하는데에는 문제 없을 것이다. 1. springboot, gradle로 컨테이너 생성(mysql 관련 설정x) - 말 그대로 컨테이너 생성에서 소프트웨어 스택은 Springboot를 선택하고 Template은 Gradle을 선택하고 추가 모듈/패키지는 하나도 선택하지 않은 채 컨테이너를 생성한다. 2. mysql 설치하기 터미널 창에서, terminal# sudo apt-get install mysql-server terminal# service mysql start te..

스프링부트 개발을 하면서 겪었던 에러들과 그 해결방법을 정리해보았다. ※ 개인의 개발 환경에 따라 발생 원인이 다르거나, 동일한 방법으로 해결되지 않을 수도 있으며 같은 에러라도 다른 다양한 이유 때문에 발생할 수 있음을 명심하자! 해당 에러들이 발생하고 해결한 환경은 구름IDE Springboot Container(gradle) 컨테이너, Spring boot 1.5.10 , Gradle 4.6 , Java 8 이다. 에러메시지) ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) -> cmd에서, service mysql start 하여 mysql을 시작한 후 m..

파이썬 소켓 기반 채팅 프로그램을 제작하면서 공부했던 내용도 따로 정리해보았다. https://hyobn.tistory.com/32 [파이썬] 채팅 프로그램 공부했던 내용 파이썬 멀티스레딩(Multi Threading) from threading import * x = Thread(target=yhb, args=('A',)) x.start() target : 쓰레드가 실행할 함수를 지정. args : target으로 지정한 함수에 넘길 인자. start() 함수.. hyobn.tistory.com 1. WinError 10038 [WinError 10038] 소켓 이외의 개체에 작업을 시도했습니다. 발생 원인 : 데이터 송수신 완료 전에 소켓을 close하면 발생한다. 해결 방법 : 코드에서 close(..