Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ZOZOTOWNの商品の閲覧を支えるJava
Search
FUJIMOTO Takuya
March 23, 2023
0
1.7k
ZOZOTOWNの商品の閲覧を支えるJava
FUJIMOTO Takuya
March 23, 2023
Tweet
Share
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Building an army of robots
kneath
306
45k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Building Adaptive Systems
keathley
43
2.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Building Applications with DynamoDB
mza
95
6.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Designing Experiences People Love
moore
142
24k
Transcript
ZOZOTOWNの商品の閲覧を 支えるJava 2023-03-23 ZOZO Tech Meetup〜Java活用事例紹介〜 株式会社ZOZO 技術本部
ECプラットフォーム部 マイグレーションブロック 藤本 拓也 Copyright © ZOZO, Inc. 1
© ZOZO, Inc. Agenda • ロードマップにおける現在地 • 商品情報を扱うサービスのこれまで • これから構築していく商品基盤
• まとめ 2
© ZOZO, Inc. ロードマップにおける現在地 3
© ZOZO, Inc. ロードマップにおける現在地 ZOZO開発組織の2022年の振り返りと現状
- Qiita (https://qiita.com/sonots/items/eaec792b4ee41ad7ef1b) 4
© ZOZO, Inc. ロードマップにおける現在地 ZOZO開発組織の2022年の振り返りと現状
- Qiita (https://qiita.com/sonots/items/eaec792b4ee41ad7ef1b) 5 参照系基盤
© ZOZO, Inc. ロードマップにおける現在地 ZOZO開発組織の2022年の振り返りと現状
- Qiita (https://qiita.com/sonots/items/eaec792b4ee41ad7ef1b) 6 BFF 検索基盤 カート決済 リプレイス
© ZOZO, Inc. 商品情報を扱うサービスのこれまで 7
© ZOZO, Inc. 商品情報を主に扱うサービス(FrontAPI) 商品情報を扱うサービスのこれまで 8 FrontAPI SQL Server
Procedure SQL • FrontAPIはマイクロサービス構想以前に作り始められていた • ストアドプロシージャからの移行を主目的としていた VBScript
© ZOZO, Inc. 商品情報を扱うサービスのこれまで 9 FrontAPIのアプリケーションの構成 • Java •
Spring Boot • MyBatis • SQL Server • JUnit • Testcontainers @Controller @Service @Mapper SQL Server
© ZOZO, Inc. 商品情報を扱うサービスのこれまで 10 コードの例 ここで値やモデルの変換などを行っている
© ZOZO, Inc. 商品情報を扱うサービスのこれまで 11 FrontAPIが使われているところ(一部)
© ZOZO, Inc. 商品情報を扱うサービスのこれまで 12 FrontAPIの普段の取り組み • FrontAPIを作成してから長い期間が経過している •
大変になっているところもある • 課題はGitHubのIssueとして積み上げている • 週一で解消する会をやっている ◦ Testが足りないところを追加したり ◦ ビルドツールをMavenからGradleに置き換えたり
© ZOZO, Inc. これから構築していく商品基盤 13
© ZOZO, Inc. これから構築していく商品基盤
ZOZO開発組織の2022年の振り返りと現状 - Qiita (https://qiita.com/sonots/items/eaec792b4ee41ad7ef1b) 14 商品基盤構築
© ZOZO, Inc. これから構築していく商品基盤 15 商品情報を扱うサービスに特化させていく 主な課題 商品情報以外の機能を持っている
FrontAPI 検索 おすすめ 商品情報 検索基盤 検索 推薦基盤 お知らせ 商品基盤
© ZOZO, Inc. これから構築していく商品基盤 16 アプリケーションの構成(検討中) • Java •
Spring Boot • (未定) 永続化フレームワーク (MyBatis or Doma2 ?) • (未定) Database (MySQL?) • JUnit (+ Spock Framework?) • ArchUnit Database? ”OpenJDK Wiki”(https://wiki.openjdk.org/display/duke/Gallery) “Spring”(https://spring.io)
© ZOZO, Inc. これから構築していく商品基盤 17 ArchUnitを使って実現したいこと Package間の依存関係をチェック プレゼンテーション層のパッケージ ユースケース層のパッケージ
ドメイン層のパッケージ プレゼンテーション層は自分自身のみ参照できる ユースケース層はプレゼンテーション層からのみ参照できる ドメイン層はいずれからも参照できる
© ZOZO, Inc. これから構築していく商品基盤 18 ArchUnitを使って実現したいこと ◯◯DateTime.now()を使わないように 使っても良いクラスを制限 各メソッドで◯◯DateTimeのクラスを
使っているか? 使っているのは◯◯DateTimeの now()メソッドか? 使っていたらテストエラーとして登録する
© ZOZO, Inc. これから構築していく商品基盤 19 その他の展望(ネイティブイメージの作成) • これまでのJavaで作られたサービスはKubernetes上で実行されている •
Goなどと比べるとどうしても立ち上がりは遅い • Spring Boot 3.0からネイティブイメージの作成がサポート • これまでよりも素早いスケールを目標に
© ZOZO, Inc. まとめ 20
© ZOZO, Inc. まとめ 21 • ZOZOTOWNの商品を閲覧するとき、裏ではJavaが使われている • ストアドプロシージャから移行した当時と状況が変わってきている •
日々の保守を行いつつ、商品情報に特化したサービスへと変化させていく • 一緒にサービスを支えていく仲間を募集中 ZOZOTOWN バックエンドエンジニア(マイクロサービス) https://hrmos.co/pages/zozo/jobs/0000005