끝나지 않는 프로그래밍 일기
지금까지 올라온 기록들
-
프로그램 제작 의뢰를 받습니다.
프로그램 제작 의뢰를 받습니다.
2025.04.01프로그램 제작의뢰를 모두 받습니다. 게임 핵이나 매크로를 제외한 의뢰는 모두 환영합니다. 의뢰에 관심 있으시면 카카오톡 su6net로 대화를 걸어주시거나, poporo@poporo.dev로 관련 메일을 보내주시기 바랍니다. 아니면 아래의 오픈채팅방으로 들어오셔서 대화를 걸어주세요. https://open.kakao.com/o/sQj0ISoh 프로젝트를 진행하기 전에는 의뢰자와 충분한 대화를 거친 뒤에 진행되며, 설계가 마무리되면 개발에 바로 착수하고 개발을 마친 뒤에 최종 검토를 합니다. 최종 검토를 거치면 프로젝트가 완료되었다고 쪽지, 메일, 문자 등의 연락 수단으로 통보를 해드립니다. -
어이가 없는 Github의 행보
어이가 없는 Github의 행보
2024.06.03깃허브에서는 보안 로그에 이상한 행동이 감지되었으면 즉시 계정을 비활성화시키고 메일로 최소한 한 통이라도 알려줬어야 했다. 그리고 레딧처럼 추가 인증 수단을 통해 비밀번호를 즉시 변경하게 하고, 추가적으로 할 수 있는 보안 조치를 단계적으로 고지했어야 했다. 하지만 깃허브는 이상 행동 보고나 정지 사유조차 통보하지 않고 계정을 일방적으로 정지시켰으며, 바로 지원팀에 문의를 넣고 후속 메일도 보냈으나 몇 일째 묵묵부답인 상태다.깃허브를 통해서 다른 여러 서비스에 소셜 로그인을 하고 있으며, 깃허브 코파일럿 같은 유료 서비스를 몇 달째 구독하고 있는 상태기도 하고, 프로젝트나 스터디를 한참 진행 중에 있는 상황이었기 때문에 이러한 상황이 더 크리티컬하게 다가왔다. 깃허브를 포트폴리오의 일부로 제출하기도 하는.. -
번외편. ConcurrentHashMap
번외편. ConcurrentHashMap
2023.04.16ConcurrentHashMap ConcurrentHashMap은 동시성을 지원하는 해시맵 클래스입니다. 기본 HashMap 클래스와 마찬가지로 키-값 쌍을 저장할 수 있으나, ConcurrentHashMap은 멀티스레드 환경에서 동시성을 지원하기 위해 설계되었습니다. 멀티스레드 애플리케이션에서 여러 스레드가 동시에 맵에서 데이터를 읽고 쓰거나, 따로 동기화 블록을 사용하는 대신 ConcurrentHashMap이 제공하는 동시성 제어 메커니즘을 활용하려면 ConcurrentHashMap을 사용할 수 있습니다. public class ConcurrentHashMap extends AbstractMap implements ConcurrentMap, Serializable { // ... // 주어진 키에 해.. -
31편. 스레드(Thread) (4)
31편. 스레드(Thread) (4)
2023.04.09Callable과 Future Callable 기억을 되살려서 Runnable이 무엇이었는지 떠올려 봅시다. 전에 사용했던 Runnable은 실행이 끝난 후에 어떤 결과 값을 반환해 줄 수 없었으며, 예외가 발생할 수 있다고 throws 문을 통해서 표현할 수도 없었습니다. 하지만 Callable을 사용하면 결과 값도 돌려줄 수 있으며, 예외도 발생시킬 수 있도록 만들 수 있습니다. @FunctionalInterface public interface Runnable { public abstract void run(); } @FunctionalInterface public interface Callable { // 계산한 결과를 반환할 수 있는 메서드다. // 만약에 결과를 계산할 수 없으면 예외를 던질 .. -
30편. 스레드(Thread) (3)
30편. 스레드(Thread) (3)
2023.04.07스레드의 상태 자바의 스레드는 총 6개의 상태(NEW, RUNNABLE, WAITING, TIMED_WAITING, BLOCKED, TERMINATED)를 가지고 있습니다. 참고로 자바의 스레드는 JVM(Java Virtual Machine, 자바 가상 머신) 위에서 돌아가며, 여기에 나와 있는 상태들은 가상 머신의 상태를 말하는 것입니다. 다시 말해서, 운영체제 스레드의 상태를 나타내는 것은 아닙니다. NEW 새로운 스레드를 만들면 NEW 상태가 됩니다. 이 상태의 스레드는 아직 시작되지 않았으며, start() 메서드를 호출하며 스레드를 시작하면 RUNNABLE 상태로 들어가게 됩니다. Thread thread = new Thread(new ThreadA()); System.out.println(th..