대용량 데이터 처리하기(1) - ByteArrayInputStream vs PipedInputStream
·
Java,Kotlin,SpringBoot
대용량 데이터 처리JVM에서 데이터를 처리하는 방법은 여러가지가 있다. 이번 포스팅에서는 InputStream에 대해 다뤄볼것이다.첫 번째 방법은 ByteArrayInputStream을 사용해서 데이터를 읽는것이다. 이 방법은 간단하게 읽을 수 있지만 데이터를 모두 메모리에 올려 놓고 사용하기 때문에 데이터의 용량이 크지 않을때 사용하기 좋다. 대용량 데이터가 아니라면 편하게 사용할 수 있다.fun readByByteArray(): InputStream { val size = 512 * 1024 * 1024 val baos = ByteArrayOutputStream(size) val random = Random(System.currentTimeMillis()) val buffer =..
2025 우먼잇츠 네트워킹데이 참석후기
·
후기
올해 나는 우먼잇츠 스터디 리더로써 열심히 불태우고 잠시 링크드인, 개발 블로그 같이 자기 PR과 잠시 멀어진 채로 지내고 있었다.그래서 네트워킹데이가 여러번 열렸지만 애써 외면하며 가지는 않았었는데 이번 네트워킹 데이는 뭔가 계속 생각이 나면서 마지막 날에 신청해서 참여하게 되었다.개인적으로 작년 이맘때쯤 취준으로 한참 힘들때 용기내서 처음으로 우먼잇츠 네트워킹 데이에 참여했었는데, 그 때 긍정적인 에너지를 많이 얻기도 했고, 스터디 리더로 꼭 지원해봐야겠다는 결심이 들었던 날이어서 올해도 꼭 참여해야지! 했는데 미루고 미루다가 마지막이라는 말에 참여하게 되었다.AI 사생대회이벤트로 AI를 활용해 이미지를 생성해서 발표하는 시간을 가졌는데, 나는 GPT에게 여성 개발자 네트워킹 데이에 서로 테이블에 모..
[Kafka] Kafka Producer Basic
·
기타
Kafka Producer란?프로듀서는 새로운 메시지를 생성해서 카프카 브로커로 보내는 클라이언트 API이다.프로듀서 기본 설정bootstrap.servers: 프로듀서가 사용할 브로커의 host:port 목록key.serializer: 레코드의 키 값을 직렬화하기 위해 사용하는 시리얼라이저 클래스의 이름value.serialize: 레코드의 밸류값을 직렬화하기 위해 사용하는 시리얼라이저 클래스의 이름public class Main { public static void main(String[] args) { Properties prop = new Properties(); prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localho..
내가 만든 앱에 국제화 적용하기
·
후기
내가 만든 myfo라는 서비스는 뜨개인이라면 누구나 사용가능할 수 있는 간단한 기능이므로, 영어, 일본어로 국제화된 서비스면 더 좋지 않을까라는 생각이 들었다.아무런 채용 프로세스가 진행되지 않는 설 연휴때 뭘 할까 고민하다 문구 국제화를 도입하기로 하였다.(실제로 3일도 안걸림)예상했던것보다 정말 간단한 작업이었다.Flutter Localizationspubspec.yaml 에 flutter_localizations에 대한 의존성을 추가하고dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter intl: ^0.19.0lib/l10n 디렉토리에 app_en.arb, app_ko.arb 를 만들어 아래와 같이 json..
3주만에 앱을 출시해보았다.
·
후기
계기다니던 회사의 갑작스런 폐업으로 원치않는 취준생이 된지 7개월이 막 넘어갈때쯤 정말 가고 싶었던 회사의 최종면접에서 떨어지고, 새롭게 기회를 얻은 다른 회사의 최종면접에서도 떨어졌습니다.초반에 떨어졌으면 모르겠는데 최종 면접에서 떨어지니까 너무 괴로웠고 나는 안될 사람인가 싶었습니다.그래도 개발을 포기하고 싶지는 않았고, 더 길어지는 공백기에 좌절로만 시간을 보낼 수는 없어서 평소 만들고 싶었던 서비스를 만들어서 출시 해보자라고 결심했습니다. 취준 시절에 대학 친구들과 함께 플러터로 앱을 개발해서 출시까지 해본 경험으로(지금도 운영중) 앱을 만들어서 출시까지 해보자는 생각이 들었고, 평소 제가 이런 서비스 있으면 좋을 것 같은데.. 라고 생각했던것들 중 가장 쉽고, 빠르게 구현할 수 있는 아이디어를 ..
Write-Back 전략을 사용한 장바구니 기능 개발
·
설계
목표redis를 사용해 write-back을 적용한 장바구니 기능을 구현해보면서 write-back을 학습한다.write back 이란? write back이란 변경사항을 바로 DB에 반영하는것이 아닌, 캐시같은 임시 저장공간에 저장해뒀다가, 나중에 DB에 저장하는 전략이다. 이렇게 하면 DB에 부하를 줄일 수 있기 때문에 빈번한 수정이 일어나는 좋아요나 장바구니 기능에 적용하기 좋다.기본적인 장바구니 기능 구현최소기능만 구현할거라 JPA를 사용하지 않고, JdbcTemplate을 사용했다.data.sqlCREATE TABLE IF NOT EXISTS CartItem ( userId BIGINT NOT NULL, productId BIGINT NOT NULL, quantity INT NOT N..
Serverless에서 dotenv 사용하기
·
카테고리 없음
문제상황람다 함수에서 API Key같은 외부로 노출되면 안되는 민감한 데이터들을 다루는 일이 종종 있다.이런 값들을 환경변수로 다루려면 serverless.yml에 환경변수를 작성하고 주입해주는 방법이 있다.하지만 이런 방법은 결국 민감한 정보가 외부로 노출되는 건 똑같다.(아니면 AWS console에서 직접 환경변수를 주입해줘야 한다. 이 경우 테스트 하려면 매번 배포해야 하는 단점이 있다.)serverless.ymlprovider: name: aws runtime: nodejs18.x environment: APP_NAME: myfo S3_BUCKET: my_buckethandler.tsprocess.env를 통해 환경변수에 접근할 수 있다....const key = `${proce..
GraphQL 잘 사용하기
·
카테고리 없음
이전에 회사에 신규 입사자분들이 많이 오셔서 온보딩겸 준비했던 GraphQL 잘 사용하기 이다.동료분이 블로그에도 올리면 좋을것 같다고 하셔서 블로그에도 기록차 남기게 되었다.(이전에 사용하던 블로그에서 다시 옮겨왔습니다)GraphQLGraphQL(Graph Query Language)은 페이스북에서 만든 쿼리 언어로서, 그래프로 스키마의 연관관계를 표현한다.구성 요소스키마리졸버그래서 어떤점이 좋은가?클라이언트에서 원하는 값만 가져올 수 있다.(Over-Fetching 문제 해결)REST API에 비해 변경에 유연하게 대처할 수 있다.예시) user에 새 필드가 추가되었는데 REST API는 user/v1/123 에서 user/v2/123을 새로 만들어줘야 하지만 GraphQL에서는 새 필드만 추가하면 ..
women tech week 24 참여후기
·
후기
3달 지나서 쓰는 후기 😅 9월 7일  tech week에 참여했다.그 동안 여성 개발자 커뮤니티에 한 두번 가입해봤지만 제대로 운영되는 곳은 거의 없었고 대부분 자기소개 정도 하고 끝났던 것 같다.그러던 중 블로그를 찾아보다가 우먼잇츠를 알게되었고, 활발하게 운영되는곳인것 같아 바로 가입했다.https://swits.notion.site/IT-s-04cb12f4b9aa4d0c87b225fc79102c06 서울 우먼잇츠(IT’s) 활동 페이지 | Notion환영합니다! 😎 여성을 위한 IT 학습 커뮤니티, 서울 우먼잇츠 는 IT 실무 역량을 강화하고, 공통의 관심사로 함께 성장하는 허브 입니다. 다양한 직무와 관심사를 가진 동료들과 교류하며 지금swits.notion.site내가 가입했을당시에 잇츠 ..
[SpringBoot] Event 사용하기
·
Java,Kotlin,SpringBoot
문제 상황예를 들어, 유저가 회원가입 완료시 쿠폰을 지급해야 하는 정책이 있다고 가정해보자@Transactional@Serviceclass UserRegisterService( private val couponService: CouponService) { fun register(email: String, password: String, name: String) { val user = User(email, password, name) /*** * 회원 가입 로직 */ couponService.issueCoupon(user.id) }}만약 회원가입까지는 성공 했는데 쿠폰 서비스에서 쿠폰을 발행하는 과정에 예외가 발생하면 어떻게..
togeepizza
'분류 전체보기' 카테고리의 글 목록