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
Site-Speed That Sticks
csswizardry
10
820
We Have a Design System, Now What?
morganepeng
53
7.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Producing Creativity
orderedlist
PRO
347
40k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Git: the NoSQL Database
bkeepers
PRO
431
66k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
A Modern Web Designer's Workflow
chriscoyier
696
190k
How GitHub (no longer) Works
holman
315
140k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
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