문제 및 풀이 신호 전송 비동기 처리
·
프로젝트/COTATO.KR
문제 및 풀이 신호 전송 비동기처리선착순 퀴즈 풀이 프로젝트는 23년 10월 시작된 이후 매 주 프로젝트 회의를 진행하고 있다.아무래도 매주 금요일 ‘코테이토’ 정규 세션에서 활용을 하고, 회의를 주말에 진행하기 때문에 세션 진행간 발생했던 이슈 또는 이상한 점을 회의 초반에 공유하고 시작한다.문제이 중 ‘특정 인원의 득점률이 과하게 높은 것 같다.’라는 이야기가 나왔다.실제로 이를 파악하기 위해 통계 페이지를 확인한 결과 현재 10기 CS교육을 진행하다보면 특정 인원의 득점률이 과하게 높다는걸 볼 수 있다. 이는 9기에도 비슷하게 발생했던 이슈인데, 당시에는 쏠리지는 않지만 비슷하게 상위권 득점자를 보면 자주 등장하는 이름들이 있다.나름 광클 방지, 동시성 처리 등 치트키라고 불릴만 한 것들은 방지해..
ConcurrentHashMap은 어떻게 동시성을 보장할까?
·
카테고리 없음
개발을 하다보면 특정 key에 대한 value를 저장하고 관리해야할 필요가 많다.Java에서는 Key, Value 형태로 데이터를 관리하는 자료구조로 Hash Table 과 HashMap을 두고 있다.HashTable은 JDK 1.0에 등장했고 JDK 1.2에서 컬렉션 프레임워크가 도입되면서 HashMap이 등장했는데 컬렉션 프레임워크 Map의 기본 구현체인 HashMap 을 일반적으로 많이 사용한다. Thread Safe하지 않은 HashMapJava는 멀티 스레드를 지원하는 언어이다. 스프링 역시 요청 당 각각의 스레드를 활용해 요청을 처리하는데 이런 환경에서 동기화를 진행하지 않는 HashMap은 Thread Safe 하지 않다. Thread Safe란?여러 개의 스레드가 동시에 객체에 접근하더라도..
@RoleAuthority를 통한 API 권한 관리
·
프로젝트/COTATO.KR
@RoleAuthority를 통한 권한 분리기존 코테이토 프로젝트는 유저 권한은 활동 부원(Member)이 동아리에서 맡은 역할에 따라 다양한 Role이 존재한다.실제로 사이트에서 이용하는 기능에 따라 아래와 같이 역할을 구분할 수 있다.ADMIN: 코테이토 운영진 (과 개발팀) - 전체 접근 권한OPERATION: 운영지원팀 - 출결 관리EDUCATION: 교육팀 - 문제 풀이 관리MEMBER: 기본 부원 - 문제 풀이, 출결 입력OLD_MEMBER: 코테이토를 수료하고, 현재는 활동 중이지 않은 부원들GENERAL: 가입 신청 대기 중인 부원REFUSED: 가입 신청 후 거절된 부원이 역할들은 실제 코테이토에서 ‘운영되고 있는 팀’별로 역할을 구분하고 서버와 DB의 용어로 가져와 사용 중이다.부원의 ..
팀을 운영하는 경험
·
프로젝트/COTATO.KR
최근 다시 면접을 보며 협업과 관련된 질문을 다시 하나 둘 받기 시작한다. 실제 협업 경험을 꽤 어필하는 편인데 팀장으로 프로젝트를 1년 이상 이끌며 프로젝트를 매주 꾸준히 대면 회의를 진행하며 의사 결정을 하고 아이템을 정해 유지보수하고, 인원 충원을 하는 등 다양한 경험을 하고 있다.특히 4개의 파트, 10명에 가까운 팀원과 함께 하는 협업이 쉽지만은 않다. 최근 KPT회고와 피드백 설문, 원온원을 하고 있으면서 느끼는 것들이 많다.이런 시점에서 회사는 어떤 사람과 협업하고 싶은가에 대한 고민을 다시 한번 해보면 좋지 않을까라는 생각을 하다 1년반동안 팀을 운영하며 내가 중요하게 생각하는 것들을 정리해볼까 한다.목표를 공유하는 것프로젝트가 잘 되기 위해서 가장 중요한 것은 참여하는 모두가 적극적이고 ..
인력(引力)
·
글을 써봐요/그냥 글
인력(引力) 최근 10기 데모데이를 다녀왔다. 10기로 활동을 하진 않았지만, 단기 스터디로 다시 9기 때부터 진행해온 개발 블로그 쓰기 스터디 를 맡아서 진행했고, 해당 스터디를 다음 기수에도 이어서, 그리고 규모를 조금 키워서 진행할 예정이기에 데모데이에 개블스 발표를 진행하려 참여했다. 같은 데모데이를 준비하며 주변에서 발표하는게 떨린다, 걱정된다라는 이야기를 하는 친구가 있었다. 나에게 있어서 발표와 특히 사람들에게 앞에서 이야기 하는 것은 전혀 어렵지 않았다. 8기 교육팀과 운영진을 하고 프로젝트 팀장으로 1년 넘게 회의를 진행해오면서 이전에 실제 들었던 발표도 꽤 잘했다고 생각했기에 부담없이 하라고 다소 마음 편한 얘기를 했다. 나도 늘 하던대로 발표 준비를 하고 데모데이 장소에 도착했다. 도..
TaskScheduler를 통한 동적 스케줄링
·
프로젝트/COTATO.KR
TaskScheduler를 통한 동적 스케줄링코테이토 프로젝트에서 출석 입력 기능을 개발 이후, 운영진의 출결 입력 안내가 없더라도 사용자들이 세션 시작 시간이 되면 출결 입력을 할 수 있었으면 좋겠다는 니즈가 있었다.따라서, 출석 입력이 허용되기 시작하는 시간에 사용자들에게 출결 입력 알림을 전송이란 기획이 추가되었다.해당 기능 개발을 위해 2가지에 대한 고민이 필요했다.서버가 클라이언트에게 출결 입력 시작을 알리는 방법유저가 지정한 시간에 알림을 전송하는 방법첫번째 고민에 대해서는 서버 → 클라이언트의 단방향 전송을 위한 Server Sent Event를 사용하기로 결정했다.(구체적인 이야기는 다른 글에서 다루도록 하겠다.)이 글에선 두 번째 고민인 유저가 지정한 시간에 동적으로 서버에서 스케줄링을 ..
Redis는 왜 빠를까?
·
카테고리 없음
COTATO 프로젝트를 하면서 회원 가입, 캐시, 선착순 요청 처리, 동시성 처리등 redis를 많은 부분에서 활용하고 있다. 최근 올라오는 백엔드 개발자 취업 공고에도 redis는 우대 사항이 아닌, 자격사항에 포함된 경우가 많다. 레디스는 싱글스레드, 인메모리 DB등의 특징이 있는데 레디스가 주목받는 이유는 여러가지가 있지만 그 중 하나는 ‘빠른 속도’이다. 실제로 우리 서비스에 레디스를 사용하는 이유 중 하나도 ‘빠른 처리 속도’ 중 하나인데 정작 왜?에 대한 고민을 해보진 않을 것 같다.실제 redis.io에도 Redis는 빠르다 빠르다 하는데 그 이유가 뭘까? 하는 고민을 하던 중 최범균님의 유튜브에 레디스가 빠른 5가지 이유라는 제목의 영상이 올라왔다.https://www.youtube.com..
25년도
·
글을 써봐요/그냥 글
난 백엔드 개발자(였)다.25년 초 퇴사를 했다. 3개월의 시간이었지만 회사와 맞지 않는 부분이 있었고 그 결정 끝에 퇴사를 결정했다.다시 개발자로 취업을 준비하는 지금 지난 3개월을 돌아보고 25년 목표를 작성해보고자 한다.진로많은 고민을 해봤지만 나는 최종적으론 ‘필요한 서비스를 만들 능력이 있는 소프트웨어 엔지니어’가 되고 싶다. 그러한 소프트웨어 엔지니어가 되기 위해선 백엔드부터 범용적인 기술과 이론에 대해 이해가 필요하다고 생각한다. 여러가지 시작점이 있겠지만, 지난 3개월 간의 경험을 돌이켜봤을때 Java 백엔드 개발자로 계속 도전하고 싶다는 생각이 아직은 명확하게 든다. 이렇게 커리어를 시작해 최종적으론 한 기업의 CTO까지 커리어를 확장하고 싶다. 그래서 올해는, 지금은 ‘서비스를 만들 능..
ThreadLocalRandom을 활용한 성능 개선기
·
프로젝트/COTATO.KR
ThreadLocalRandom을 사용해 성능 개선하기문제현재 이메일 인증 랜덤 코드를 발생할때 요청 이후 인증코드 발송까지 꽤 오랜시간이 걸리는데, 클라이언트에서 인증코드 발송 요청을 보낸 후 요청이 성공했다는 서버의 응답이 오면 아래와 같은 팝업을 띄운다.문제는 서버에서 response자체가 오래걸려 인증 메일 발송 완료 팝업 이 뜨는데 오래 걸리고, 인증 메일 발송 버튼이 계속 활성화 되어 유저가 여러번의 인증 메일 발송을 요청하는 문제가 있었다.즉, 서버의 응답 시간이 늦어 유저가 여러 요청을 하게된 것이다.우선적으로 프론트엔드에서 응답이 오지 않더라도 팝업을 띄우고 버튼을 비활성화하는 방법을 마련했지만, 서버측에서도 요청시간을 줄일 필요를 느꼈다.Random 클래스 사용현재는 java.util...
IT동아리에서 운영진으로 성장하기 - (2)
·
활동/cotato
운영진 (8, 9기: 2023.08 ~ 2024.08)8기엔 교육팀장을 9기엔 홍보팀원 (및 깍두기 … )으로 나름의 운영에 관여해 의견을 피력했다. 나는 어떻게 성장했지?우선, 내가 개발자로 성장하는 과정에서 어떻게 성장해왔는지에 대해 생각해봤다. 유의미한 깨달음을 얻고 변화한것은 이유와 더 나은 방법에 대해 고민하기 시작했을때부터였는데 아쉽게도 그 계기는 이곳이 아니었다. 사실 내가 깨달음을 얻고 성장하기 시작했던 계기는 'GDSC 자바 스터디' + '야놀자 특강' + '우테코 프리코스'였던 것 같다.이 활동을 하며 만난 사람들의 공통점은 하나 같이 아래와 같은 공통점이 있었는데‘개발’에 몰입하고 있다.정보를 공유하고 있다이 사람들과 함께하며 나도 몰입하고, 고민하게 되고 이야기를 나누며 변화하기 시..
유쓰응
글쓰는 개발자 Youth